Java IO整理

Java IO 整理

本文參考
http://blog.csdn.net/yuebinghaoyuan/article/details/7388059/
http://www.cnblogs.com/oubo/archive/2012/01/06/2394638.html
轉載請說明出處


Java中的流,可以從不同的角度進行分類。

按照數據流的方向不同可以分爲:輸入流和輸出流。

按照處理數據單位不同可以分爲:字節流和字符流。

按照實現功能不同可以分爲:節點流和處理流。

 

節點流:直接與數據源相連,讀入或讀出。

 

處理流:與節點流一塊使用,在節點流的基礎上,再套接一層,套接在節點流上的就是處理流。

 

JDK提供的流繼承了四大類:InputStream(字節輸入流),OutputStream(字節輸出流),Reader(字符輸入流),Writer(字符輸出流)。

     

 

輸入字節流InputStreamIO

 

1.InputStream 是所有的輸入字節流的父類,它是一個抽象類。

2.ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三種基本的介質流,它們分別從Byte 數組、StringBuffer、和本地文件中讀取數據。3.PipedInputStream 是從與其它線程共用的管道中讀取數據

4.ObjectInputStream 和所有FilterInputStream 的子類都是裝飾流(裝飾器模式的主角)。


 

輸出字節流OutputStream

        

1.OutputStream 是所有的輸出字節流的父類,它是一個抽象類。

2.ByteArrayOutputStream、FileOutputStream 是兩種基本的介質流,它們分別向Byte 數組、和本地文件中寫入數據。PipedOutputStream 是向與其它線程共用的管道中寫入數據,

3.ObjectOutputStream 和所有FilterOutputStream 的子類都是裝飾流。


 

字符輸入流Reader

 

1.Reader 是所有的輸入字符流的父類,它是一個抽象類。

2.CharReader、StringReader 是兩種基本的介質流,它們分別將Char 數組、String中讀取數據。PipedReader 是從與其它線程共用的管道中讀取數據。

3.BufferedReader 很明顯就是一個裝飾器,它和其子類負責裝飾其它Reader 對象。

4.FilterReader 是所有自定義具體裝飾流的父類,其子類PushbackReader 對Reader 對象進行裝飾,會增加一個行號。

5.InputStreamReader 是一個連接字節流和字符流的橋樑,它將字節流轉變爲字符流。FileReader 可以說是一個達到此功能、常用的工具類,在其源代碼中明顯使用了將FileInputStream 轉變爲Reader 的方法。我們可以從這個類中得到一定的技巧。Reader 中各個類的用途和使用方法基本和InputStream 中的類使用一致。後面會有Reader 與InputStream 的對應關係。

 


 

字符輸出流Writer



1.Writer 是所有的輸出字符流的父類,它是一個抽象類。

2.CharArrayWriter、StringWriter 是兩種基本的介質流,它們分別向Char 數組、String 中寫入數據。PipedWriter 是向與其它線程共用的管道中寫入數據,

3.BufferedWriter是一個裝飾器爲Writer 提供緩衝功能。

4.PrintWriter 和PrintStream 極其類似,功能和使用也非常相似。

5.OutputStreamWriter 是OutputStream 到Writer 轉換的橋樑,它的子類FileWriter 其實就是一個實現此功能的具體類(具體可以研究一SourceCode)。功能和使用和OutputStream 極其類似。


 

補充

1.字節/字符數組:ByteArrayInputStream,ByteArrayOutputStream,CharArrayReader,CharArrayWriter是在內存中開闢了一個字節或字符數組。

2.Buffered緩衝流::BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter,是帶緩衝區的處理流,緩衝區的作用的主要目的是:避免每次和硬盤打交道,提高數據訪問的效率。

3.對象流:ObjectInputStream,ObjectOutputStream,把封裝的對象直接輸出,而不是一個個在轉換成字符串再輸出。

4.序列化流:SequenceInputStream。將兩個或者多個輸入流當成一個輸入流依次讀取

使用對象流需要實現Serializable接口,否則會報錯。而若用transient關鍵字修飾成員變量,不寫入該成員變量,若是引用類型的成員變量爲null,值類型的成員變量爲0.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章