Java IO: 流
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替代它的所有子類。
這是一個簡單的示例:
OutputStream output = new FileOutputStream("c:\\data\\output-file.txt"); output.write("Hello World".getBytes()); output.close();
組合流
你可以將流整合起來以便實現更高級的輸入和輸出操作。比如,一次讀取一個字節是很慢的,所以可以從磁盤中一次讀取一大塊數據,然後從讀到的數據塊中獲取字節。為了實現緩衝,可以把InputStream包裝到BufferedInputStream中。代碼示例:
InputStream input = new BufferedInputStream(new FileInputStream("c:\\data\\input-file.txt"));
緩衝同樣可以應用到OutputStream中。你可以實現將大塊數據批量地寫入到磁盤(或者相應的流)中,這個功能由BufferedOutputStream實現。
緩衝隻是通過流整合實現的其中一個效果。你可以把InputStream包裝到PushbackInputStream中,之後可以將讀取過的數據推回到流中重新讀取,在解析過程中有時候這樣做很方便。或者,你可以將兩個InputStream整合成一個SequenceInputStream。
將不同的流整合到一個鏈中,可以實現更多種高級操作。通過編寫包裝了標準流的類,可以實現你想要的效果和過濾器。
最後更新:2017-05-23 14:02:30
上一篇:
人工神經網絡簡介
下一篇:
《Java特種兵》1.6 常見的目錄與工具包
利用正則實現彩色控製台輸出
UVA之10361 - Automatic Poetry
LockSupport 源碼閱讀
Android開發7——android.database.CursorIndexOutOfBoundsException:Index -1 requested, with a size of 1
Jackson 高性能的JSON處理 android/移動開發必備jackson
雲服務器 ECS安全:高級安全Windows防火牆概述以及最佳實踐
關於android反編譯
linux 整理
SQL Server vs Oracle 簡單語法比較
黑客演示用音樂將智能設備變成監聽器,他們是怎麼做到的?