一個程序經常需要從外部獲取信息,或者向外部發送信息2005年10月26日。信息可以在任何地方:在一個文件中,在磁盤上,在網絡上的某個地方,內存中,或者在另外一個程序中。 同時,信息可以是任何類型:對象,字符,圖形,或者聲音, 這一節包括了Java? 平臺中可以用來讀寫的類。
overview of i/o Streams
要得到信息,程序在源數據上打開一個流(文件,內存,socket),然后順序讀入數據,如下圖所示:

同樣,程序可以通過打開一個文件流向目標發送信息:

無論數據來自哪里或者向哪發送,無論是何種類型,讀寫數據的規則是一樣的:
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.*包 文件流類的集合,支持這些讀寫的規則,。 使用這些類,程序需要import java.io.*。文件流類可以分為兩個類層次,以所處理的數據類型(字符或字節)為基礎。

字符流
Reader和Writer是java.io.包里面字符流的兩個抽象類。 Reader類提供了readers--stream 讀取16-bit字符的API和部分實現,,Writer提供了writers--streams 寫入16-bit字符的api和部分實現。Reader和Writer的子類分為兩類:從data sink中讀寫的類(黑色),和數據處理類(白色)


大部分應用程序應該用reader和writer來讀寫文本信息。原因是他們可以處理Unicode中字符集
總的任何字符,而字節流只能處理 iso-Latin-1 8-bit字節。
字節流
為了讀寫8-bit字節,程序應該使用字節流,InputStream和OutputStream的子類,InputStream和OutputStream提供了input streams(streams that read 8-bit bytes),output streams(streams that write 8-bit bytes)的api和部分實現,這些流典型的用來讀寫二進制數據,像圖像,聲音。 其中字節流的兩個類,ObjectInputStream,ObjectOutputStream用于對象的序列化,These classes are covered in Object Serialization
就像Reader和Writer類,,InputStream和OutputStream的子類也分為兩類,數據接收流(陰影)和數據處理流


理解 i/o 超類
Reader和InputStream定義了相似的APIs,,只是針對的data type不同。例如,Reader 包含了以下讀取字符和字符數組的方法:
int read()
int read(char cbuf[])
int read(char cbuf[], int offset,int length)
InputStream 定義了相同的方法,用來讀取字節和字節數組
int read()
int read(char cbuf[])
int read(char cbuf[], int offset,int length)
同樣的,Reader和InputStream提供一些相似的方法,例如在流中作標記,skipping input,重置當前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---在創建的時候自動打開,可以調用他們的
關閉方法關閉他們,或者黨對象不再使用時由垃圾回收機制回收。
posted on 2005-10-26 15:27
blackdead - Life is sad 閱讀(216)
評論(0) 編輯 收藏 所屬分類:
java技術