JavaTM 2 Platform
Standard Ed. 6

java.io
類別 BufferedInputStream

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

public class BufferedInputStream
extends FilterInputStream

BufferedInputStream 為另一個輸入串流添加一些功能,即緩衝輸入以及支持 markreset 方法的能力。在創建 BufferedInputStream 時,會創建一個內部緩衝區陣列。在讀取或跳過串流中的位元組時,可根據需要從套件含的輸入串流再次填充該內部緩衝區,一次填充多個位元組。mark 操作記錄輸入串流中的某個點,reset 操作使得在從套件含的輸入串流中獲取新位元組之前,再次讀取自最後一次 mark 操作後讀取的所有位元組。

從以下版本開始:
JDK1.0

欄位摘要
protected  byte[] buf
          存儲資料的內部緩衝區陣列。
protected  int count
          比緩衝區中最後一個有效位元組的索引大 1 的索引。
protected  int marklimit
          調用 mark 方法後,在後續調用 reset 方法失敗之前所允許的最大提前讀取量。
protected  int markpos
          最後一次調用 mark 方法時 pos 欄位的值。
protected  int pos
          緩衝區中的當前位置。
 
從類別 java.io.FilterInputStream 繼承的欄位
in
 
建構子摘要
BufferedInputStream(InputStream in)
          創建一個 BufferedInputStream 並保存其參數,即輸入串流 in,以便將來使用。
BufferedInputStream(InputStream in, int size)
          創建具有指定緩衝區大小的 BufferedInputStream 並保存其參數,即輸入串流 in,以便將來使用。
 
方法摘要
 int available()
          返回可以從此輸入串流讀取(或跳過)、且不受此輸入串流接下來的方法調用阻塞的估計位元組數。
 void close()
          關閉此輸入串流並釋放與該串流關聯的所有系統資源。
 void mark(int readlimit)
          參見 InputStreammark 方法的常規協定。
 boolean markSupported()
          測試此輸入串流是否支持 markreset 方法。
 int read()
          參見 InputStreamread 方法的常規協定。
 int read(byte[] b, int off, int len)
          從此位元組輸入串流中給定偏移量處開始將各位元組讀取到指定的 byte 陣列中。
 void reset()
          參見 InputStreamreset 方法的常規協定。
 long skip(long n)
          參見 InputStreamskip 方法的常規協定。
 
從類別 java.io.FilterInputStream 繼承的方法
read
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

欄位詳細資訊

buf

protected volatile byte[] buf
存儲資料的內部緩衝區陣列。必要時可用另一個不同大小的陣列替換它。


count

protected int count
比緩衝區中最後一個有效位元組的索引大 1 的索引。此值始終處於 0buf.length 的範圍內;從 buf[0]buf[count-1] 的元素包含從底層輸入串流中獲取的緩衝輸入資料。


pos

protected int pos
緩衝區中的當前位置。這是將從 buf 陣列中讀取的下一個字元的索引。

此值始終處於 0count 的範圍內。如果此值小於 count,則 buf[pos] 將作為下一個輸入位元組;如果此值等於 count,則下一次 readskip 操作需要從套件含的輸入串流中讀取更多的位元組。

另請參見:
buf

markpos

protected int markpos
最後一次調用 mark 方法時 pos 欄位的值。

此值始終處於 -1pos 的範圍內。如果輸入串流中沒有被標記的位置,則此欄位為 -1。如果輸入串流中有被標記的位置,則 buf[markpos] 將用作 reset 操作後的第一個輸入位元組。如果 markpos 不是 -1,則從位置 buf[markpos]buf[pos-1] 之間的所有位元組都必須保留在緩衝區陣列中(儘管對 countposmarkpos 的值進行適當調整後,這些位元組可能移動到緩衝區陣列中的其他位置);除非 posmarkpos 的差超過 marklimit,否則不能將其丟棄。

另請參見:
mark(int), pos

marklimit

protected int marklimit
調用 mark 方法後,在後續調用 reset 方法失敗之前所允許的最大提前讀取量。只要 posmarkpos 之差超過 marklimit,就可以通過將 markpos 設置為 -1 來刪除該標記。

另請參見:
mark(int), reset()
建構子詳細資訊

BufferedInputStream

public BufferedInputStream(InputStream in)
創建一個 BufferedInputStream 並保存其參數,即輸入串流 in,以便將來使用。創建一個內部緩衝區陣列並將其存儲在 buf 中。

參數:
in - 底層輸入串流。

BufferedInputStream

public BufferedInputStream(InputStream in,
                           int size)
創建具有指定緩衝區大小的 BufferedInputStream 並保存其參數,即輸入串流 in,以便將來使用。創建一個長度為 size 的內部緩衝區陣列並將其存儲在 buf 中。

參數:
in - 底層輸入串流。
size - 緩衝區大小。
拋出:
IllegalArgumentException - 如果 size <= 0
方法詳細資訊

read

public int read()
         throws IOException
參見 InputStreamread 方法的常規協定。

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

read

public int read(byte[] b,
                int off,
                int len)
         throws IOException
從此位元組輸入串流中給定偏移量處開始將各位元組讀取到指定的 byte 陣列中。

此方法實作了 InputStream 類別相應 read 方法的常規協定。另一個便捷之處在於,它將通過重複地調用底層串流的 read 方法,嘗試讀取盡可能多的位元組。這種迭代的 read 會一直繼續下去,直到滿足以下條件之一:

如果第一次對底層串流調用 read 返回 -1(指示檔案末尾),則此方法返回 -1。否則此方法返回實際讀取的位元組數。

鼓勵(但不是必須)此類別的各個子類別以相同的方式嘗試讀取盡可能多的位元組。

覆寫:
類別 FilterInputStream 中的 read
參數:
b - 目標緩衝區。
off - 開始存儲位元組處的偏移量。
len - 要讀取的最大位元組數。
返回:
讀取的位元組數;如果已到達串流末尾,則返回 -1
拋出:
IOException - 如果已經調用其 close() 方法關閉了此輸入串流,或者發生 I/O 錯誤。
另請參見:
FilterInputStream.in

skip

public long skip(long n)
          throws IOException
參見 InputStreamskip 方法的常規協定。

覆寫:
類別 FilterInputStream 中的 skip
參數:
n - 要跳過的位元組數。
返回:
跳過的實際位元組數。
拋出:
IOException - 如果串流不支持尋找操作;或者已經調用其 close() 方法關閉了此輸入串流;或者發生 I/O 錯誤。

available

public int available()
              throws IOException
返回可以從此輸入串流讀取(或跳過)、且不受此輸入串流接下來的方法調用阻塞的估計位元組數。接下來的調用可能是同一個執行緒,也可能是不同的執行緒。一次讀取或跳過這麼多位元組將不會受阻塞,但可以讀取或跳過數量更少的位元組。

此方法返回緩衝區中剩餘的待讀取位元組數 (count - pos) 與調用 in.available() 的結果之和。

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

mark

public void mark(int readlimit)
參見 InputStreammark 方法的常規協定。

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

reset

public void reset()
           throws IOException
參見 InputStreamreset 方法的常規協定。

如果 markpos-1(尚未設置標記,或者標記已失效),則拋出 IOException。否則將 pos 設置為與 markpos 相等。

覆寫:
類別 FilterInputStream 中的 reset
拋出:
IOException - 如果尚未標記此串流;或者標記已失效;或者已經調用其 close() 方法關閉了此輸入串流;或者發生 I/O 錯誤。
另請參見:
mark(int)

markSupported

public boolean markSupported()
測試此輸入串流是否支持 markreset 方法。BufferedInputStreammarkSupported 方法返回 true

覆寫:
類別 FilterInputStream 中的 markSupported
返回:
一個 boolean 值,指示此串流型別是否支持 markreset 方法。
另請參見:
InputStream.mark(int), InputStream.reset()

close

public void close()
           throws IOException
關閉此輸入串流並釋放與該串流關聯的所有系統資源。關閉了該串流之後,後續的 read()、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