目錄:系統學習 Java IO---- 目錄,概覽html
PushbackInputStream 旨在從 InputStream 解析數據時使用。 有時您須要先讀取幾個字節以查看將要發生的事情,而後才能肯定如何解釋當前字節, PushbackInputStream 容許這樣作。 實際上,它容許將讀取的字節推回到流中,這樣就像流沒有被動過,下次調用 read() 時,將再次從新讀取。通俗來說,就像男人對女人(Stream)說:我只看看,不動手。java
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() 返回,就像在堆棧上同樣。code
流自己不支持回退功能, PushBackInputStream 內部維護了一個 byte 數組來實現推回操做的。
protected byte[] buf
推回緩衝區。
protected int pos
推回緩衝區中的位置,將讀取該位置的下一個字節。htm
能夠在 PushbackInputStream 的構造函數中設置應該可以讀取的字節數。 如下是如何經過 PushbackInputStream 構造函數設置回退限制:blog
int pushbackLimit = 8; PushbackInputStream input = new PushbackInputStream( new FileInputStream("c:\\data\\input.txt"), pushbackLimit);
此示例設置 8 字節的內部緩衝區。 這意味着您能夠一次讀取最多 8 個字節,而後推回去。get
方法 | 說明 |
---|---|
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。調用就異常。 |