一個程序經(jīng)常需要從外部獲取信息,或者向外部發(fā)送信息2005年10月26日。信息可以在任何地方:在一個文件中,在磁盤上,在網(wǎng)絡(luò)上的某個地方,內(nèi)存中,或者在另外一個程序中。 同時,信息可以是任何類型:對象,字符,圖形,或者聲音, 這一節(jié)包括了Java? 平臺中可以用來讀寫的類。
overview of i/o Streams
要得到信息,程序在源數(shù)據(jù)上打開一個流(文件,內(nèi)存,socket),然后順序讀入數(shù)據(jù),如下圖所示:
同樣,程序可以通過打開一個文件流向目標(biāo)發(fā)送信息:
無論數(shù)據(jù)來自哪里或者向哪發(fā)送,無論是何種類型,讀寫數(shù)據(jù)的規(guī)則是一樣的:
Reading
Writing
open a stream
while more information
read information
close the stream
open a stream
while more information
write information
close the stream
java.io.*包 文件流類的集合,支持這些讀寫的規(guī)則,。 使用這些類,程序需要import java.io.*。文件流類可以分為兩個類層次,以所處理的數(shù)據(jù)類型(字符或字節(jié))為基礎(chǔ)。
字符流
Reader和Writer是java.io.包里面字符流的兩個抽象類。 Reader類提供了readers--stream 讀取16-bit字符的API和部分實(shí)現(xiàn),,Writer提供了writers--streams 寫入16-bit字符的api和部分實(shí)現(xiàn)。Reader和Writer的子類分為兩類:從data sink中讀寫的類(黑色),和數(shù)據(jù)處理類(白色)
大部分應(yīng)用程序應(yīng)該用reader和writer來讀寫文本信息。原因是他們可以處理Unicode中字符集
總的任何字符,而字節(jié)流只能處理 iso-Latin-1 8-bit字節(jié)。
字節(jié)流
為了讀寫8-bit字節(jié),程序應(yīng)該使用字節(jié)流,InputStream和OutputStream的子類,InputStream和OutputStream提供了input streams(streams that read 8-bit bytes),output streams(streams that write 8-bit bytes)的api和部分實(shí)現(xiàn),這些流典型的用來讀寫二進(jìn)制數(shù)據(jù),像圖像,聲音。 其中字節(jié)流的兩個類,ObjectInputStream,ObjectOutputStream用于對象的序列化,These classes are covered in Object Serialization
就像Reader和Writer類,,InputStream和OutputStream的子類也分為兩類,數(shù)據(jù)接收流(陰影)和數(shù)據(jù)處理流
理解 i/o 超類
Reader和InputStream定義了相似的APIs,,只是針對的data type不同。例如,Reader 包含了以下讀取字符和字符數(shù)組的方法:
int read()
int read(char cbuf[])
int read(char cbuf[], int offset,int length)
InputStream 定義了相同的方法,用來讀取字節(jié)和字節(jié)數(shù)組
int read()
int read(char cbuf[])
int read(char cbuf[], int offset,int length)
同樣的,Reader和InputStream提供一些相似的方法,例如在流中作標(biāo)記,skipping input,重置當(dāng)前position。
Writer和OutputStream也是相似的:
int write(int c) int write(char cbuf[]) int write(char cbuf[], int offset, int length)
And OutputStream
defines the same methods but for bytes:
int write(int c) int write(byte cbuf[]) int write(byte cbuf[], int offset, int length)
所有這些流,readers, writers, input streams, and output streams---在創(chuàng)建的時候自動打開,可以調(diào)用他們的
關(guān)閉方法關(guān)閉他們,或者黨對象不再使用時由垃圾回收機(jī)制回收。