JavaTM 2 Platform
Standard Ed. 6

java.io
類別 PushbackInputStream

java.lang.Object
  繼承者 java.io.InputStream
      繼承者 java.io.FilterInputStream
          繼承者 java.io.PushbackInputStream
所有已實作的介面:
Closeable

public class PushbackInputStream
extends FilterInputStream

PushbackInputStream 為另一個輸入串流添加性能,即“推回 (push back)”或“取消讀取 (unread)”一個位元組的能力。在程式碼片段可以很方便地讀取由特定位元組值分隔的不定數量的資料位元組時,這很有用;在讀取終止位元組後,程式碼片段可以“取消讀取”該位元組,這樣,輸入串流上的下一個讀取操作將會重新讀取被推回的位元組。例如,表示構成標識符字元的位元組可能由表示操作符字元的位元組終止;用於讀取一個標識符的方法可以讀取到遇到操作符為止,然後將該操作符推回以進行重讀。

從以下版本開始:
JDK1.0

欄位摘要
protected  byte[] buf
          推回緩衝區。
protected  int pos
          推回緩衝區中的位置,將讀取該位置的下一個位元組。
 
從類別 java.io.FilterInputStream 繼承的欄位
in
 
建構子摘要
PushbackInputStream(InputStream in)
          創建 PushbackInputStream 並保存其參數(即輸入串流 in),以供將來使用。
PushbackInputStream(InputStream in, int size)
          使用指定 size 的推回緩衝區創建 PushbackInputStream,並保存其參數(即輸入串流 in),以供將來使用。
 
方法摘要
 int available()
          返回可以不受下一次調用此輸入串流的方法阻塞地從此輸入串流讀取(或跳過)的估計位元組數。
 void close()
          關閉此輸入串流並釋放與該串流關聯的所有系統資源。
 void mark(int readlimit)
          在此輸入串流中標記當前的位置。
 boolean markSupported()
          測試此輸入串流是否支持 markreset 方法,此輸入串流不支持這兩個方法。
 int read()
          從此輸入串流中讀取下一個資料位元組。
 int read(byte[] b, int off, int len)
          從此輸入串流將最多 len 個資料位元組讀入 byte 陣列。
 void reset()
          將此串流重新定位到最後一次對此輸入串流調用 mark 方法時的位置。
 long skip(long n)
          從此輸入串流中跳過並丟棄 n 個資料位元組。
 void unread(byte[] b)
          推回一個 byte 陣列:將其複製到推回緩衝區之前。
 void unread(byte[] b, int off, int len)
          推回 byte 陣列的某一部分:將其複製到推回緩衝區之前。
 void unread(int b)
          推回一個位元組:將其複製到推回緩衝區之前。
 
從類別 java.io.FilterInputStream 繼承的方法
read
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

欄位詳細資訊

buf

protected byte[] buf
推回緩衝區。

從以下版本開始:
JDK1.1

pos

protected int pos
推回緩衝區中的位置,將讀取該位置的下一個位元組。緩衝區為空時,pos 等於 buf.length;緩衝區已滿時,pos 等於 0。

從以下版本開始:
JDK1.1
建構子詳細資訊

PushbackInputStream

public PushbackInputStream(InputStream in,
                           int size)
使用指定 size 的推回緩衝區創建 PushbackInputStream,並保存其參數(即輸入串流 in),以供將來使用。最初,不存在推回位元組(欄位 pushBack 被初始化為 -1)。

參數:
in - 從中讀取位元組的輸入串流。
size - 推回緩衝區的大小。
拋出:
IllegalArgumentException - 如果 size <= 0
從以下版本開始:
JDK1.1

PushbackInputStream

public PushbackInputStream(InputStream in)
創建 PushbackInputStream 並保存其參數(即輸入串流 in),以供將來使用。最初,不存在推回位元組(欄位 pushBack 被初始化為 -1)。

參數:
in - 從中讀取位元組的輸入串流。
方法詳細資訊

read

public int read()
         throws IOException
從此輸入串流中讀取下一個資料位元組。以 int 形式返回 0255 範圍內位元組值。如果因為已經到達串流末尾而沒有可用的位元組,則返回值 -1。在輸入資料可用、檢測到串流末尾或者拋出異常之前,此方法一直阻塞。

此方法返回最近一次推回的位元組(如果有),否則將調用其底層輸入串流的 read 方法,並返回該方法返回的任何值。

覆寫:
類別 FilterInputStream 中的 read
返回:
下一個資料位元組;如果已到達串流末尾,則返回 -1
拋出:
IOException - 如果已調用其 close() 方法關閉此輸入串流,或者發生 I/O 錯誤。
另請參見:
InputStream.read()

read

public int read(byte[] b,
                int off,
                int len)
         throws IOException
從此輸入串流將最多 len 個資料位元組讀入 byte 陣列。此方法首先讀取所有推回位元組;然後,如果讀取的位元組數少於 len 個位元組,那麼它將從底層輸入串流中讀取位元組。如果 len 不為 0,那麼在至少 1 個輸入位元組可用之前,該方法將一直阻塞;否則,不讀取任何位元組並返回 0

覆寫:
類別 FilterInputStream 中的 read
參數:
b - 讀入資料的緩衝區。
off - 目標陣列 b 中的初始偏移量。
len - 讀取的最大位元組數。
返回:
讀入緩衝區的總位元組數;如果因為已經到達串流末尾而不再有資料可用,則返回 -1
拋出:
NullPointerException - 如果 bnull
IndexOutOfBoundsException - 如果 off 為負,len 為負,或者 len 大於 b.length - off
IOException - 如果已調用其 close() 方法關閉此輸入串流,或者發生 I/O 錯誤。
另請參見:
InputStream.read(byte[], int, int)

unread

public void unread(int b)
            throws IOException
推回一個位元組:將其複製到推回緩衝區之前。此方法返回後,要讀取的下一個位元組的值將為 (byte)b

參數:
b - 要推回其低位位元組的 int 值。
拋出:
IOException - 如果推回緩衝區中沒有足夠的空間來存儲位元組,或者已調用其 close() 方法關閉此輸入串流。

unread

public void unread(byte[] b,
                   int off,
                   int len)
            throws IOException
推回 byte 陣列的某一部分:將其複製到推回緩衝區之前。此方法返回後,要讀取的下一個位元組的值將為 b[off],該位元組之後的位元組的值將為 b[off+1],依此類別推。

參數:
b - 要推回的 byte 陣列。
off - 資料的初始偏移量。
len - 要推回的位元組數。
拋出:
IOException - 如果推回緩衝區中沒有足夠的空間來存儲指定位元組數,或者已調用其 close() 方法關閉此輸入串流。
從以下版本開始:
JDK1.1

unread

public void unread(byte[] b)
            throws IOException
推回一個 byte 陣列:將其複製到推回緩衝區之前。此方法返回後,要讀取的下一個位元組的值將為 b[0],該位元組之後的位元組的值將為 b[1],依此類別推。

參數:
b - 要推回的 byte 陣列
拋出:
IOException - 如果推回緩衝區中沒有足夠的空間來存儲指定位元組數,或者已調用其 close() 方法關閉此輸入串流。
從以下版本開始:
JDK1.1

available

public int available()
              throws IOException
返回可以不受下一次調用此輸入串流的方法阻塞地從此輸入串流讀取(或跳過)的估計位元組數。下一次調用可能是相同的執行緒,也可能是不同的執行緒。一次讀取或跳過該估計數個位元組不會受阻塞,但是讀取或跳過的位元組可能少於該數。

該方法返回已被推回的位元組數與 available 返回的值之和。

覆寫:
類別 FilterInputStream 中的 available
返回:
可以不受阻塞地從此輸入串流讀取(或跳過)的位元組數。
拋出:
IOException - 如果已調用其 close() 方法關閉此輸入串流,或者發生 I/O 錯誤。
另請參見:
FilterInputStream.in, InputStream.available()

skip

public long skip(long n)
          throws IOException
從此輸入串流中跳過並丟棄 n 個資料位元組。由於多種原因,skip 方法結束時跳過的位元組數可能少於該數,也可能為 0。如果 n 為負,則不跳過任何位元組。

PushbackInputStreamskip 方法首先跳過推回緩衝區中的位元組(如果有)。如果需要跳過更多位元組,那麼它將調用底層輸入串流的 skip 方法。返回跳過的實際位元組數。

覆寫:
類別 FilterInputStream 中的 skip
參數:
n - 要跳過的位元組數。
返回:
跳過的實際位元組數。
拋出:
IOException - 如果串流不支持尋找操作,或者已調用其 close() 方法關閉,或者發生 I/O 錯誤。
從以下版本開始:
1.2
另請參見:
FilterInputStream.in, InputStream.skip(long n)

markSupported

public boolean markSupported()
測試此輸入串流是否支持 markreset 方法,此輸入串流不支持這兩個方法。

覆寫:
類別 FilterInputStream 中的 markSupported
返回:
false,因為此類別不支持 markreset 方法。
另請參見:
InputStream.mark(int), InputStream.reset()

mark

public void mark(int readlimit)
在此輸入串流中標記當前的位置。

PushbackInputStreammark 方法不執行任何操作。

覆寫:
類別 FilterInputStream 中的 mark
參數:
readlimit - 在標記位置變無效前可以讀取位元組的最大限制。
另請參見:
InputStream.reset()

reset

public void reset()
           throws IOException
將此串流重新定位到最後一次對此輸入串流調用 mark 方法時的位置。

類別 PushbackInputStream 的方法 reset 不執行任何操作,只拋出 IOException

覆寫:
類別 FilterInputStream 中的 reset
拋出:
IOException - 如果調用此方法。
另請參見:
InputStream.mark(int), IOException

close

public void close()
           throws IOException
關閉此輸入串流並釋放與該串流關聯的所有系統資源。關閉串流之後,再調用 read()、unread()、available()、reset() 或 skip() 將拋出 IOException。關閉以前關閉的串流無效。

指定者:
介面 Closeable 中的 close
覆寫:
類別 FilterInputStream 中的 close
拋出:
IOException - 如果發生 I/O 錯誤。
另請參見:
FilterInputStream.in

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only