Java IO總結(含代碼)
來源:程序員人生 發布時間:2015-06-16 08:26:49 閱讀次數:2824次
從API學起
Java流操作有關的類或接口:

Java流類圖結構:

流的概念和作用
流是1組有順序的,有出發點和終點的字節集合,是對數據傳輸的總稱或抽象。即數據在兩裝備間的傳輸稱為流,流的本質是數據傳輸,根據數據傳輸特性將流抽象為各種類,方便更直觀的進行數據操作。
IO流的分類
- 根據處理數據類型的不同分為:字符流和字節流
- 根據數據流向不同分為:輸入流和輸出流
字符流和字節流
字符流的由來: 由于數據編碼的不同,而有了對字符進行高效操作的流對象。本質其實就是基于字節流讀取時,去查了指定的碼表。 字節流和字符流的區分:
- 讀寫單位不同:字節流以字節(8bit)為單位,字符流以字符為單位,根據碼表映照字符,1次可能讀多個字節。
- 處理對象不同:字節流能處理所有類型的數據(如圖片、avi等),而字符流只能處理字符類型的數據。
結論:只要是處理純文本數據,就優先斟酌使用字符流。 除此以外都使用字節流。
輸入流和輸出流
對輸入流只能進行讀操作,對輸出流只能進行寫操作,程序中需要根據待傳輸數據的不同特性而使用不同的流。
Java IO流對象
1.輸入字節流InputStreamIO 中輸入字節流的繼承圖可見上圖,可以看出:
- InputStream 是所有的輸入字節流的父類,它是1個抽象類。
- ByteArrayInputStream、StringBufferInputStream、FileInputStream 是3種基本的介質流,它們分別從Byte 數組、StringBuffer、和本地文件中讀取數據。PipedInputStream 是從與其它線程共用的管道中讀取數據,與Piped 相干的知識后續單獨介紹。
- ObjectInputStream 和所有FilterInputStream 的子類都是裝潢流(裝潢器模式的主角)。
2.輸出字節流OutputStream
IO 中輸出字節流的繼承圖可見上圖,可以看出:
- OutputStream 是所有的輸出字節流的父類,它是1個抽象類。
- ByteArrayOutputStream、FileOutputStream 是兩種基本的介質流,它們分別向Byte 數組、和本地文件中寫入數據。PipedOutputStream 是向與其它線程共用的管道中寫入數據,
- ObjectOutputStream 和所有FilterOutputStream 的子類都是裝潢流。
3.字節流的輸入與輸出的對應

圖中藍色的為主要的對應部份,紅色的部份就是不對應部份。紫色的虛線部份代表這些流1般要搭配使用。從上面的圖中可以看出Java IO 中的字節流是極為對稱的。“存在及公道”我們看看這些字節流中不太對稱的幾個類吧!
- LineNumberInputStream 主要完成從流中讀取數據時,會得到相應的行號,至于甚么時候分行、在哪里分行是由改類主動肯定的,其實不是在原始中有這樣1個行號。在輸出部份沒有對應的部份,我們完全可以自己建立1個LineNumberOutputStream,在最初寫入時會有1個基準的行號,以后每次遇到換行時會在下1行添加1個行號,看起來也是可以的。好像更不入流了。
- PushbackInputStream 的功能是查看最后1個字節,不滿意就放入緩沖區。主要用在編譯器的語法、詞法分析部份。輸出部份的BufferedOutputStream 幾近實現相近的功能。
- StringBufferInputStream 已被Deprecated,本身就不應當出現在InputStream 部份,主要由于String 應當屬于字符流的范圍。已被廢棄了,固然輸出部份也沒有必要需要它了!還允許它存在只是為了保持版本的向下兼容而已。
- SequenceInputStream 可以認為是1個工具類,將兩個或多個輸入流當做1個輸入流順次讀取。完全可以從IO 包中去除,還完全不影響IO 包的結構,卻讓其更“純潔”
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈