1. 程式人生 > >系統學習 Java IO (十)----回退流 PushbackInputStream

系統學習 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。呼叫就異常。