自學(xué)筆記:IO流
I/O流
流根據(jù)流的方向分為輸入流和輸出流
輸入流:字節(jié)輸入流、字符輸入流
輸出流:字節(jié)輸出流、字符輸出流
輸入流是從數(shù)據(jù)源中讀取數(shù)據(jù),只進(jìn)行讀操作。
輸出流是將數(shù)據(jù)寫(xiě)入到指定文件中,只進(jìn)行寫(xiě)操作。
根據(jù)流的數(shù)據(jù)類(lèi)型分為字節(jié)流和字符流
字節(jié)流:字節(jié)輸入流、字節(jié)輸出流
字符流:字符輸入流、字符輸出流
純文本數(shù)據(jù)優(yōu)先使用字符流,除此之外使用字節(jié)流。
字節(jié)流
字節(jié)流結(jié)構(gòu)圖:

InputStream
為字節(jié)輸入流的根類(lèi),有多個(gè)子類(lèi)。
方法:
int read():從輸入流中讀取下一個(gè)字節(jié)并返回,返回為0~255。讀取到末尾返回-1。
int read(byte[] b):讀取多個(gè)字節(jié),存到數(shù)組b中,并返回。輸入流結(jié)束返回-1。
int available():返回輸入流中可讀或可跳過(guò)的的字節(jié)數(shù)。
void close():關(guān)閉輸入流,并釋放資源。
######OutPutStream
為字節(jié)輸出流的根類(lèi),有多個(gè)子類(lèi)。
方法:
void write(int b):將指定整數(shù)b的低八位寫(xiě)入輸出流。
write(byte[] b):將指定數(shù)組b的b.length個(gè)字節(jié)寫(xiě)入輸出流。
void flush():刷新輸出流,輸出全部緩存內(nèi)容。
void close():關(guān)閉輸出流,并釋放系統(tǒng)資源。
######FileInputStream
FileInputStream和FileOutputStream用來(lái)實(shí)現(xiàn)文件的讀寫(xiě)。
構(gòu)造方法:
FileInputStream(String name):傳入字符串形式的地址。
FileInputStream(File file):或者傳入一個(gè)File對(duì)象。
該構(gòu)造方法拋出FileNotFountException異常。
覆蓋了父類(lèi)的read()、available()、close()方法。
FileOutputStream
構(gòu)造方法:
FileOutputStream(String name):傳入字符串形式的文件地址。如果不存在就創(chuàng)建一個(gè)文件;存在就將源文件內(nèi)容覆蓋。public FileOutputStream(String name, boolean append):參數(shù)為T(mén)rue時(shí),不覆蓋文件內(nèi)容,在文件末尾寫(xiě)新內(nèi)容。FileOutputStream(File file)。
BufferedInputStream
BufferedInputStream和BufferedOutputStream都是緩沖流。使用緩沖流可以減少讀取的次數(shù),提高讀取效率。輸入時(shí),先將數(shù)據(jù)讀取進(jìn)緩沖區(qū),再?gòu)木彌_區(qū)讀取單個(gè)字節(jié);輸出時(shí),先將數(shù)據(jù)一個(gè)一個(gè)寫(xiě)道緩沖區(qū),再將整個(gè)數(shù)組寫(xiě)入是輸出流中。
構(gòu)造放法:
BufferedInputStream(InputStream in):傳入一個(gè)輸入流。緩沖區(qū)大小默認(rèn)521字節(jié)。
BufferedInputStream(InputStream in, int size):手動(dòng)指定緩沖區(qū)大小。
BufferedOutputStream
構(gòu)造方法:
BufferedOutputStream(OutputStream out):默認(rèn)大小521字節(jié)。
BufferedOutputStream(OutputStream out, int size):指定大小。
DataInputStream
DataInputStream和DataOutputStream用于實(shí)現(xiàn)基本數(shù)據(jù)類(lèi)型的輸入輸出。
構(gòu)造方法:
DataInputStream(InputStream in)
方法:(舉例)
byte readByte():讀取一個(gè)字節(jié)并返回該字節(jié)。
int readInt():讀取一個(gè)int型整數(shù)并返回。
String readUTF():讀取UTF-8格式的字符串。
DataOutputStream
構(gòu)造方法:
DataOutputStream(OutputStream out)
方法:(舉例)
void writeByte(int v):將v的低8位寫(xiě)入。
void writeShort(int v):寫(xiě)入16位整數(shù)。
void writeBytes(String s):將字符串每個(gè)字符的低8位按順序?qū)懭胼敵隽鳌?/span>
ObjectInputStream
ObjectInputStream和ObjectOutputStream是實(shí)現(xiàn)對(duì)對(duì)象的輸入輸出,將對(duì)象的狀態(tài)進(jìn)行保存與恢復(fù)。
**注意:要對(duì)對(duì)象進(jìn)行讀寫(xiě)操作,首先該類(lèi)要實(shí)現(xiàn)Serializable接口進(jìn)行序列化。
ObjectInputStream實(shí)現(xiàn)了DataInput接口,所以可以讀取基本數(shù)據(jù)類(lèi)型。如readint()、readDouble。
構(gòu)造方法:
ObjectInputStream(InputStream in)
方法:(舉例)
int readInt();
Object readObejct():使用readObject()方法讀出對(duì)象,其類(lèi)型與順序要與寫(xiě)入時(shí)一致。并且讀取時(shí)是Object類(lèi)型,需要向下轉(zhuǎn)型。
ObjectOutputStream
構(gòu)造方法:
ObjectOutputStream(OutputStream out)
方法:(舉例)
void writeInt(int i)
void writeObject(Object o)
字符流
字符流結(jié)構(gòu)圖:

Reader
Reader和Writer都是字符流的根類(lèi)。
方法:
int read():讀取一個(gè)字符,返回1~65535的int值。末尾返回-1。
int read(char[] c):讀取多個(gè)字符到數(shù)組c,達(dá)到末尾返回-1。
void close()
Writer
void write(int c):寫(xiě)入一個(gè)字符,將int型的低16位寫(xiě)入。
void write(char[] c):將字符數(shù)組c中的字符全部寫(xiě)入到輸出流中。
void flush():刷新。
void close()
InputStreamReader
InputStreamReader和OutputStreamWriter可以實(shí)現(xiàn)字節(jié)流轉(zhuǎn)換位字符流。
構(gòu)造方法:
InputStreamReader(InputStream in):傳入字節(jié)輸入流,默認(rèn)底層編碼。
InputStreamReader(InputStream in, String cs):傳入字節(jié)輸入流,并指定編碼。
OutputStreamWriter
構(gòu)造方法:
OutputStreamWriter(OutputStream out)
OutputStreamWriter(OutputStream out,String cs)
BufferedReader
帶有緩沖區(qū)的字符流。
構(gòu)造方法:
BufferedReader(Reader reader)
BufferedReader(Reader reader,int size)
方法:
String readLine():沖輸入流中讀取一行,如果文件末尾返回null
BufferedWrite
構(gòu)造方法:
BufferWriter(Writer out)
BufferWriter(Writer out,int size)
方法:
writer(String str):將字符串str寫(xiě)入輸出流。
void newLine():根據(jù)系統(tǒng)寫(xiě)一個(gè)行分隔符。
FileReader
繼承InputStream,構(gòu)造放法是調(diào)用父類(lèi)(InputStreamReader)的構(gòu)造放法。
構(gòu)造方法:
FileReader(String filename)
FileReader(File file)
FileWriter
構(gòu)造方法:
FileWriter(String filename)
FielWriter(File file):根據(jù)file對(duì)象創(chuàng)建一個(gè)字符輸出流,若文件不存在創(chuàng)建一個(gè)。存在就對(duì)內(nèi)容覆蓋。
FileWriter(String filename,boolean b):b為true的時(shí)候,不覆蓋原文件內(nèi)容,再文章末尾添加。
