系統學習 Java IO (十)----回退流 PushbackInputStream

目錄:系統學習 Java IO---- 目錄,概覽

PushbackInputStream 旨在從 InputStream 解析數據時使用。 有時您需要先讀取幾個字節以查看將要發生的事情,然後才能確定如何解釋當前字節, PushbackInputStream 允許這樣做。 實際上,它允許將讀取的字節推回到流中,這樣就像流沒有被動過,下次調用 read() 時,將再次重新讀取。通俗來講,就像男人對女人(Stream)說:我只看看,不動手。

構造器
  1. PushbackInputStream(InputStream in):通過輸入流 in 創建 PushbackInputStream 。

  2. 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。調用就異常。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章