Java IO: 流
轉載自??Java IO: 流
原文鏈接?作者:?Jakob?Jenkov?譯者:?李璟(jlee381344197@gmail.com)
Java?IO流是既可以從中讀取,也可以寫入到其中的數據流。正如這個系列教程之前提到過的,流通常會與數據源、數據流向目的地相關聯,比如文件、網絡等等。
流和數組不一樣,不能通過索引讀寫數據。在流中,你也不能像數組那樣前后移動讀取數據,除非使用RandomAccessFile?處理文件。流僅僅只是一個連續的數據流。
某些類似PushbackInputStream?流的實現允許你將數據重新推回到流中,以便重新讀取。然而你只能把有限的數據推回流中,并且你不能像操作數組那樣隨意讀取數據。流中的數據只能夠順序訪問。
Java?IO流通常是基于字節或者基于字符的。字節流通常以“stream”命名,比如InputStream和OutputStream。除了DataInputStream?和DataOutputStream?還能夠讀寫int,?long,?float和double類型的值以外,其他流在一個操作時間內只能讀取或者寫入一個原始字節。
字符流通常以“Reader”或者“Writer”命名。字符流能夠讀寫字符(比如Latin1或者Unicode字符)。可以瀏覽Java?Readers?and?Writers獲取更多關于字符流輸入輸出的信息。
InputStream
java.io.InputStream類是所有Java?IO輸入流的基類。如果你正在開發一個從流中讀取數據的組件,請嘗試用InputStream替代任何它的子類(比如FileInputStream)進行開發。這么做能夠讓你的代碼兼容任何類型而非某種確定類型的輸入流。
然而僅僅依靠InputStream并不總是可行。如果你需要將讀過的數據推回到流中,你必須使用PushbackInputStream,這意味著你的流變量只能是這個類型,否則在代碼中就不能調用PushbackInputStream的unread()方法。
通常使用輸入流中的read()方法讀取數據。read()方法返回一個整數,代表了讀取到的字節的內容(譯者注:0?~?255)。當達到流末尾沒有更多數據可以讀取的時候,read()方法返回-1。
這是一個簡單的示例:
InputStream input = new FileInputStream("c:\\data\\input-file.txt"); int data = input.read(); while(data != -1){data = input.read(); }OutputStream
java.io.OutputStream是Java?IO中所有輸出流的基類。如果你正在開發一個能夠將數據寫入流中的組件,請嘗試使用OutputStream替代它的所有子類。
這是一個簡單的示例:
組合流
你可以將流整合起來以便實現更高級的輸入和輸出操作。比如,一次讀取一個字節是很慢的,所以可以從磁盤中一次讀取一大塊數據,然后從讀到的數據塊中獲取字節。為了實現緩沖,可以把InputStream包裝到BufferedInputStream中。代碼示例:
緩沖同樣可以應用到OutputStream中。你可以實現將大塊數據批量地寫入到磁盤(或者相應的流)中,這個功能由BufferedOutputStream實現。
緩沖只是通過流整合實現的其中一個效果。你可以把InputStream包裝到PushbackInputStream中,之后可以將讀取過的數據推回到流中重新讀取,在解析過程中有時候這樣做很方便。或者,你可以將兩個InputStream整合成一個SequenceInputStream。
將不同的流整合到一個鏈中,可以實現更多種高級操作。通過編寫包裝了標準流的類,可以實現你想要的效果和過濾器。
總結
以上是生活随笔為你收集整理的Java IO: 流的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 李彦宏攥紧AI
- 下一篇: Java IO: Reader And