Java IO: 其他字節流(上)
本小節會簡要概括Java IO中的PushbackInputStream,SequenceInputStream和PrintStream。其中,最常用的是PrintStream,System.out和System.err都是PrintStream類型的變量,請查看Java IO: System.in, System.out, System.err瀏覽更多關於System.out和System.err的信息。
PushbackInputStream
PushbackInputStream用於解析InputStream內的數據。有時候你需要提前知道接下來將要讀取到的字節內容,才能判斷用何種方式進行數據解析。PushBackInputStream允許你這麼做,你可以把讀取到的字節重新推回到InputStream中,以便再次通過read()讀取。代碼如下:
PushbackInputStream input = new PushbackInputStream(new FileInputStream("c:\\data\\input.txt")); int data = input.read(); input.unread(data);
可以通過PushBackInputStream的構造函數設置推回緩衝區的大小,代碼如下:
PushbackInputStream input = new PushbackInputStream(new FileInputStream("c:\\data\\input.txt"), 8);
這個例子設置了8個字節的緩衝區,意味著你最多可以重新讀取8個字節的數據。
SequenceInputStream
SequenceInputStream把一個或者多個InputStream整合起來,形成一個邏輯連貫的輸入流。當讀取SequenceInputStream時,會先從第一個輸入流中讀取,完成之後再從第二個輸入流讀取,以此推類。代碼如下:
InputStream input1 = new FileInputStream("c:\\data\\file1.txt"); InputStream input2 = new FileInputStream("c:\\data\\file2.txt"); InputStream combined = new SequenceInputStream(input1, input2);
通過SequenceInputStream,例子中的2個InputStream使用起來就如同隻有一個InputStream一樣(譯者注:SequenceInputStream的read()方法會在讀取到當前流末尾時,關閉流,並把當前流指向邏輯鏈中的下一個流,最後返回新的當前流的read()值)。
PrintStream
PrintStream允許你把格式化數據寫入到底層OutputStream中。比如,寫入格式化成文本的int,long以及其他原始數據類型到輸出流中,而非它們的字節數據。代碼如下:
PrintStream output = new PrintStream(outputStream); output.print(true); output.print((int) 123); output.print((float) 123.456); output.printf(Locale.UK, "Text + data: %1$", 123); output.close();
PrintStream包含2個強大的函數,分別是format()和printf()(這兩個函數幾乎做了一樣的事情,但是C程序員會更熟悉printf())。
譯者注:其中一個printf()函數實現如下:
public PrintStream printf(String format, Object ... args) { return format(format, args); }
最後更新:2017-05-23 11:02:54