1. 程式人生 > >Java IO: 其他位元組流(上)

Java IO: 其他位元組流(上)

作者: Jakob Jenkov 譯者: 李璟([email protected])

本小節會簡要概括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);

}