該類實(shí)現(xiàn)一個(gè)緩沖的輸入流。通過設(shè)置這樣的輸入流, 一個(gè)應(yīng)用
不必為每個(gè)讀取的字節(jié)調(diào)用基本系統(tǒng)就能將字節(jié)讀入字節(jié)流中。數(shù)據(jù)以分塊形式讀入緩沖區(qū);順序讀取能直接存取緩沖區(qū)中的數(shù)據(jù)。
java.lang.Object
|
+----java.io.InputStream
|
+----java.io.FilterInputStream
|
+----java.io.BufferedInputStream
reset
方法失敗前,調(diào)用 mark
方法之后所允許的最大讀取數(shù)。mark
方法時(shí) pos
域的值。mark
和reset
方法。mark
方法上次調(diào)用的位置。n
字節(jié)數(shù)據(jù)。
protected byte buf[]
protected int count
protected int pos
buf
數(shù)組中讀取的下一個(gè)字符的下標(biāo)。
protected int markpos
protected int marklimit
public BufferedInputStream(InputStream in)
public BufferedInputStream(InputStream in,
int size)
public synchronized int read() throws IOException
0
到 255
范圍內(nèi)的一個(gè) int
數(shù)。如果已讀到流尾,無可讀的字節(jié)時(shí),返回 -1
。禁用該方法,除非輸入數(shù)據(jù)可用,檢測出數(shù)據(jù)流終止或拋出異常。
若緩沖區(qū)不為空,則 BufferedInputStream
的讀
方法返回其緩沖區(qū)的下一個(gè)數(shù)據(jù)字節(jié)。否則, 若基本流未返回流終止指示符,則用基本輸入流重新填充緩沖流并返回下一個(gè)字符。
public synchronized int read(byte b[],
int off,
int len) throws IOException
若該流的緩沖區(qū)不為空,則將字節(jié)從中復(fù)制到參數(shù)數(shù)組,否則,
用基本輸入流重新填充該緩沖區(qū)并 (除非數(shù)據(jù)流返回流尾指示符) 用新填充的緩沖區(qū)字符來填充數(shù)組參數(shù)。
作為一種優(yōu)化, 若緩沖區(qū)為空、標(biāo)志不有效且 len
至少與緩沖區(qū)一樣大, 則該方法將直接從基本流中讀取數(shù)據(jù)到給定數(shù)組中。因此冗余的 BufferedInputStream
不能復(fù)制不必要的數(shù)據(jù)。
-1
。
public synchronized long skip(long n) throws IOException
n
字節(jié)數(shù)據(jù)。skip
BufferedInputStream
的 skip
方法比較其緩沖區(qū)中可用字節(jié)數(shù),k, 其中 k =count - pos
,
以 n
遞增。若 n
≤ k,
則 pos
域以 n
遞增。否則,遞增 pos
域來獲得值count
,并通過調(diào)用基本輸入流上的skip
方法并提供參數(shù)n -
k 來跳過剩余字節(jié)。
public synchronized int available() throws IOException
BufferedInputStream
的 available
方法返回緩沖區(qū)中剩余的字節(jié)總數(shù) (count - pos
) 和調(diào)用基本輸入流的可用的
方法的結(jié)果。
public synchronized void mark(int readlimit)
reset
方法重新將流定位于最后的標(biāo)記位置,從而后續(xù)讀取能讀取相同字節(jié)。readlimit
參數(shù)提供輸入流在標(biāo)記位置變?yōu)榉欠ㄇ八试S讀取多個(gè)字節(jié)數(shù)。
public synchronized void reset() throws IOException
mark
方法上次調(diào)用時(shí)的位置。
若流仍未標(biāo)記或標(biāo)記非法,則拋出一個(gè) IOException 。讀取前需要瀏覽一下流內(nèi)容時(shí),才使用流標(biāo)記。調(diào)用通用的語法分析器將很容易做到這一點(diǎn)。若流是語法分析器所處理的類型,則繼續(xù)前進(jìn)。若流不是該類型,失敗時(shí)語法分析器將拋出異常。若在 readlimit 字節(jié)內(nèi)拋出異常,
則語法分析器允許外部編碼重置該流并使用另一語法分析器。
public boolean markSupported()
mark
和reset
方法。BufferedInputStream
的 markSupported
true
。
boolean
,它指示該流類型是否支持mark
和 reset
方法。