IO-BufferedInputStream
java.io
類 BufferedInputStream
java.lang.Object
┗java.io.InputStream
? ┗java.io.FilterInputStream
??? ┗java.io.BufferedInputStream
所有已實現的接口:
Closeable
?
public class BufferedInputStream extends FilterInputStream
BufferedInputStream 為另一個輸入流添加一些功能,即緩沖輸入以及支持 mark 和 reset 方法的能力。在創建 BufferedInputStream 時,會創建一個內部緩沖區數組。在讀取或跳過流中的字節時,可根據需要從包含的輸入流再次填充該內部緩沖區,一次填充多個字節。mark 操作記錄輸入流中的某個點,reset 操作使得在從包含的輸入流中獲取新字節之前,再次讀取自最后一次 mark 操作后讀取的所有字節。
?
字段摘要
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)
????????? 參見 InputStream 的 mark 方法的常規協定。
?
boolean markSupported()
????????? 測試此輸入流是否支持 mark 和 reset 方法。
?
int read()
????????? 參見 InputStream 的 read 方法的常規協定。
?
int read(byte[] b, int off, int len)
????????? 從此字節輸入流中給定偏移量處開始將各字節讀取到指定的 byte 數組中。
?
void reset()
????????? 參見 InputStream 的 reset 方法的常規協定。
?
long skip(long n)
????????? 參見 InputStream 的 skip 方法的常規協定。
?
從類 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 的索引。此值始終處于 0 到 buf.length 的范圍內;從 buf[0] 到 buf[count-1] 的元素包含從底層輸入流中獲取的緩沖輸入數據。
?
pos
protected int pos緩沖區中的當前位置。這是將從 buf 數組中讀取的下一個字符的索引。
此值始終處于 0 到 count 的范圍內。如果此值小于 count,則 buf[pos] 將作為下一個輸入字節;如果此值等于 count,則下一次 read 或 skip 操作需要從包含的輸入流中讀取更多的字節。
?
markpos
protected int markpos最后一次調用 mark 方法時 pos 字段的值。
此值始終處于 -1 到 pos 的范圍內。如果輸入流中沒有被標記的位置,則此字段為 -1。如果輸入流中有被標記的位置,則 buf[markpos] 將用作 reset 操作后的第一個輸入字節。如果 markpos 不是 -1,則從位置 buf[markpos] 到 buf[pos-1] 之間的所有字節都必須保留在緩沖區數組中(盡管對 count、pos 和 markpos 的值進行適當調整后,這些字節可能移動到緩沖區數組中的其他位置);除非 pos 與 markpos 的差超過 marklimit,否則不能將其丟棄。
?
marklimit
protected int marklimit調用 mark 方法后,在后續調用 reset 方法失敗之前所允許的最大提前讀取量。只要 pos 與 markpos 之差超過 marklimit,就可以通過將 markpos 設置為 -1 來刪除該標記。
?
構造方法詳細信息
?
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
參見 InputStream 的 read 方法的常規協定。
?
覆蓋:
類 FilterInputStream 中的 read
返回:
下一個數據字節,如果到達流末尾,則返回 -1。
拋出:
IOException - 如果已經調用其 close() 方法關閉了此輸入流,或者發生 I/O 錯誤。
?
read
public int read(byte[] b, int off, int len) throws IOException
從此字節輸入流中給定偏移量處開始將各字節讀取到指定的 byte 數組中。
此方法實現了 InputStream 類相應 read 方法的常規協定。另一個便捷之處在于,它將通過重復地調用底層流的 read 方法,嘗試讀取盡可能多的字節。這種迭代的 read 會一直繼續下去,直到滿足以下條件之一:
已經讀取了指定的字節數,
底層流的 read 方法返回 -1,指示文件末尾(end-of-file),或者
底層流的 available 方法返回 0,指示將阻塞后續的輸入請求。
?
如果第一次對底層流調用 read 返回 -1(指示文件末尾),則此方法返回 -1。否則此方法返回實際讀取的字節數。
?
鼓勵(但不是必須)此類的各個子類以相同的方式嘗試讀取盡可能多的字節。
?
覆蓋:
類 FilterInputStream 中的 read
參數:
b - 目標緩沖區。
off - 開始存儲字節處的偏移量。
len - 要讀取的最大字節數。
返回:
讀取的字節數;如果已到達流末尾,則返回 -1。
拋出:
IOException - 如果已經調用其 close() 方法關閉了此輸入流,或者發生 I/O 錯誤。
?
skip
public long skip(long n) throws IOException
參見 InputStream 的 skip 方法的常規協定。
?
覆蓋:
類 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)
參見 InputStream 的 mark 方法的常規協定。
?
覆蓋:
類 FilterInputStream 中的 mark
參數:
readlimit - 在標記位置變為無效之前可以讀取字節的最大限制。
?
reset
public void reset() throws IOException
參見 InputStream 的 reset 方法的常規協定。
如果 markpos 為 -1(尚未設置標記,或者標記已失效),則拋出 IOException。否則將 pos 設置為與 markpos 相等。
?
覆蓋:
類 FilterInputStream 中的 reset
拋出:
IOException - 如果尚未標記此流;或者標記已失效;或者已經調用其 close() 方法關閉了此輸入流;或者發生 I/O 錯誤。
?
markSupported
public boolean markSupported()
測試此輸入流是否支持 mark 和 reset 方法。BufferedInputStream 的 markSupported 方法返回 true。
?
覆蓋:
類 FilterInputStream 中的 markSupported
返回:
一個 boolean 值,指示此流類型是否支持 mark 和 reset 方法。
?
close
public void close() throws IOException
關閉此輸入流并釋放與該流關聯的所有系統資源。關閉了該流之后,后續的 read()、available()、reset() 或 skip() 調用都將拋出 IOException。關閉之前已關閉的流不會產生任何效果。
?
指定者:
接口 Closeable 中的 close
覆蓋:
類 FilterInputStream 中的 close
拋出:
IOException - 如果發生 I/O 錯誤。
?
轉載于:https://www.cnblogs.com/zzuLiang/p/4681098.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的IO-BufferedInputStream的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Memcached 群集高可用性(HA)
- 下一篇: hdu2923 最短路floyd