系統學習 Java IO (十)----回退流 PushbackInputStream
PushbackInputStream 旨在從 InputStream 解析資料時使用。 有時您需要先讀取幾個位元組以檢視將要發生的事情,然後才能確定如何解釋當前位元組, PushbackInputStream 允許這樣做。 實際上,它允許將讀取的位元組推回到流中,這樣就像流沒有被動過,下次呼叫 read() 時,將再次重新讀取。通俗來講,就像男人對女人(Stream)說:我只看看,不動手。
構造器
PushbackInputStream(InputStream in):通過輸入流 in 建立 PushbackInputStream 。
PushbackInputStream(InputStream in, int size):使用指定 size 建立 , size 代表推回緩衝區的大小。
這是一個簡單的PushbackInputStream示例:
PushbackInputStream input = new PushbackInputStream(new FileInputStream("c:\\data\\input.txt"));
int data = input.read();
input.unread(data);
對 read() 的呼叫就像從 InputStream 中讀取一個位元組。 對 unread() 的呼叫將一個位元組推回到PushbackInputStream 中。 下次呼叫 read() 時,將首先讀取推回的位元組。 如果將多個位元組被推回,則推回的最新位元組將首先從 read() 返回,就像在堆疊上一樣。
欄位摘要
流本身不支援回退功能, PushBackInputStream 內部維護了一個 byte 陣列來實現推回操作的。
protected byte[] buf
推回緩衝區。
protected int pos
推回緩衝區中的位置,將讀取該位置的下一個位元組。
設定 PushbackInputStream 的後推限制
可以在 PushbackInputStream 的建構函式中設定應該能夠讀取的位元組數。 以下是如何通過 PushbackInputStream 建構函式設定回退限制:
int pushbackLimit = 8; PushbackInputStream input = new PushbackInputStream( new FileInputStream("c:\\data\\input.txt"), pushbackLimit);
此示例設定 8 位元組的內部緩衝區。 這意味著您可以一次讀取最多 8 個位元組,然後推回去。
方法摘要
方法 | 說明 |
---|---|
int read(byte[] b, int off, int len) | 從此輸入流將最多 len 個數據位元組讀入 byte 陣列。 |
void unread(byte[] b) | 推回一個 byte 陣列:將其複製到推回緩衝區之前。 |
void unread(int b) | 推回一個位元組:將其複製到推回緩衝區之前。 |
void mark(int readlimit) | 標記當前位置。和 ByteInputStream 一樣,此類的 mark() 方法不執行任何操作。 |
void reset() | 此類的 reset() 方法不執行任何操作,只丟擲 IOException。呼叫就異常。 |