鴻蒙OS BufferedInputStream

2022-10-17 16:48 更新

BufferedInputStream

java.lang.Object

|---java.io.InputStream

|---|---java.io.FilterInputStream

|---|---|---java.io.BufferedInputStream

public class BufferedInputStream
extends FilterInputStream

BufferedInputStream 向另一個輸入流添加了功能,即緩沖輸入并支持標(biāo)記和重置方法的能力。 創(chuàng)建 BufferedInputStream 時,會創(chuàng)建一個內(nèi)部緩沖區(qū)數(shù)組。 當(dāng)流中的字節(jié)被讀取或跳過時,內(nèi)部緩沖區(qū)會根據(jù)需要從包含的輸入流中重新填充,一次很多字節(jié)。 標(biāo)記操作會記住輸入流中的一個點,并且重置操作會導(dǎo)致在從包含的輸入流中獲取新字節(jié)之前重新讀取自最近一次標(biāo)記操作以來讀取的所有字節(jié)。

Since:

JDK1.0

字段摘要

修飾符和類型 字段 描述
protected byte[] buf 存儲數(shù)據(jù)的內(nèi)部緩沖區(qū)數(shù)組。
protected int count 比緩沖區(qū)中最后一個有效字節(jié)的索引大一的索引。
protected int marklimit 在隨后調(diào)用 reset 方法失敗之前調(diào)用 mark 方法后允許的最大預(yù)讀。
protected int markpos 調(diào)用最后一個標(biāo)記方法時 pos 字段的值。
protected int pos 緩沖區(qū)中的當(dāng)前位置。
從類 java.io.FilterInputStream 繼承的字段
in

構(gòu)造函數(shù)摘要

構(gòu)造函數(shù) 描述
BufferedInputStream(InputStream in) 創(chuàng)建一個 BufferedInputStream 并保存其參數(shù),即輸入流,以供以后使用。
BufferedInputStream(InputStream in, int size) 創(chuàng)建具有指定緩沖區(qū)大小的 BufferedInputStream,并保存其參數(shù),即輸入流,以供以后使用。

方法總結(jié)

修飾符和類型 方法 描述
int available() 返回可以從此輸入流中讀?。ɑ蛱^)的字節(jié)數(shù)的估計值,而不會被下一次調(diào)用此輸入流的方法阻塞。
void close() 關(guān)閉此輸入流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源。
void mark(int readlimit) 參見 InputStream 的 mark 方法的通用約定。
boolean markSupported() 測試此輸入流是否支持 mark 和 reset 方法。
int read() 參見 InputStream 的 read 方法的通用約定。
int read(byte[] b, int off, int len) 從此字節(jié)輸入流中將字節(jié)讀取到指定的字節(jié)數(shù)組中,從給定的偏移量開始。
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

字段詳細(xì)信息

buf

protected volatile byte[] buf

存儲數(shù)據(jù)的內(nèi)部緩沖區(qū)數(shù)組。 必要時,它可以被另一個不同大小的數(shù)組替換。

count

protected int count

比緩沖區(qū)中最后一個有效字節(jié)的索引大一的索引。 該值始終在 0 到 buf.length 的范圍內(nèi); 元素 buf[0] 到 buf[count-1] 包含從底層輸入流獲得的緩沖輸入數(shù)據(jù)。

marklimit

protected int marklimit

在隨后調(diào)用 reset 方法失敗之前調(diào)用 mark 方法后允許的最大預(yù)讀。 每當(dāng) pos 和 markpos 之間的差值超過 marklimit 時,可以通過將 markpos 設(shè)置為 -1 來刪除該標(biāo)記。

markpos

protected int markpos

調(diào)用最后一個標(biāo)記方法時 pos 字段的值。

該值始終在 -1 到 pos 的范圍內(nèi)。 如果輸入流中沒有標(biāo)記位置,則該字段為-1。 如果輸入流中有標(biāo)記位置,則 buf[markpos] 是復(fù)位操作后作為輸入提供的第一個字節(jié)。 如果 markpos 不是 -1,則從位置 buf[markpos] 到 buf[pos-1] 的所有字節(jié)都必須保留在緩沖區(qū)數(shù)組中(盡管它們可以移動到緩沖區(qū)數(shù)組中的另一個位置,并適當(dāng)調(diào)整 計數(shù)、位置和標(biāo)記位置); 除非且直到 pos 和 markpos 之間的差異超過 marklimit,否則它們可能不會被丟棄。

pos

protected int pos

緩沖區(qū)中的當(dāng)前位置。 這是要從 buf 數(shù)組中讀取的下一個字符的索引。

該值始終在 0 到 count 的范圍內(nèi)。 如果它小于 count,則 buf[pos] 是作為輸入提供的下一個字節(jié); 如果它等于 count,那么下一次讀取或跳過操作將需要從包含的輸入流中讀取更多字節(jié)。

構(gòu)造函數(shù)詳細(xì)信息

BufferedInputStream

public BufferedInputStream(InputStream in)

創(chuàng)建一個 BufferedInputStream 并保存其參數(shù),即輸入流,以供以后使用。 創(chuàng)建一個內(nèi)部緩沖區(qū)數(shù)組并將其存儲在 buf 中。

參數(shù):

參數(shù)名稱 參數(shù)描述
in 底層輸入流。

BufferedInputStream

public BufferedInputStream(InputStream in, int size)

創(chuàng)建具有指定緩沖區(qū)大小的 BufferedInputStream,并保存其參數(shù),即輸入流,以供以后使用。 創(chuàng)建一個長度大小的內(nèi)部緩沖區(qū)數(shù)組并將其存儲在 buf 中。

參數(shù):

參數(shù)名稱 參數(shù)描述
in 底層輸入流。
size 緩沖區(qū)大小。

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果 size <= 0.

方法詳情

read

public int read() throws IOException

參見 InputStream 的 read 方法的通用約定。

覆蓋:

讀入類 FilterInputStream

返回:

數(shù)據(jù)的下一個字節(jié),如果到達(dá)流的末尾,則為 -1。

Throws:

Throw名稱 Throw描述
IOException 如果此輸入流已通過調(diào)用其 close() 方法關(guān)閉,或者發(fā)生 I/O 錯誤。

read

public int read(byte[] b, int off, int len) throws IOException

從此字節(jié)輸入流中將字節(jié)讀取到指定的字節(jié)數(shù)組中,從給定的偏移量開始。

該方法實現(xiàn)了 InputStream 類對應(yīng)的 [InputStream#read(byte], int, int) 方法的通用約定。 作為額外的便利,它嘗試通過重復(fù)調(diào)用底層流的讀取方法來讀取盡可能多的字節(jié)。 此迭代讀取將繼續(xù),直到滿足以下條件之一:

  • 已讀取指定數(shù)量的字節(jié),
  • 底層流的read方法返回-1,表示文件結(jié)束,或者
  • 底層流的可用方法返回零,表示進(jìn)一步的輸入請求將阻塞。

如果對底層流的第一次讀取返回 -1 以指示文件結(jié)束,則此方法返回 -1。 否則,此方法返回實際讀取的字節(jié)數(shù)。

鼓勵但不要求此類的子類嘗試以相同方式讀取盡可能多的字節(jié)。

覆蓋:

讀入類 FilterInputStream

參數(shù):

參數(shù)名稱 參數(shù)描述
b 目標(biāo)緩沖區(qū)。
off 開始存儲字節(jié)的偏移量。
len 要讀取的最大字節(jié)數(shù)。

返回:

讀取的字節(jié)數(shù),如果已到達(dá)流的末尾,則為 -1。

Throws:

Throw名稱 Throw描述
IOException 如果此輸入流已通過調(diào)用其 close() 方法關(guān)閉,或者發(fā)生 I/O 錯誤。

skip

public long skip(long n) throws IOException

參見 InputStream 的 skip 方法的通用約定。

覆蓋:

跳過類 FilterInputStream

參數(shù):

參數(shù)名稱 參數(shù)描述
n 要跳過的字節(jié)數(shù)。

返回:

跳過的實際字節(jié)數(shù)。

Throws:

Throw名稱 Throw描述
IOException 如果流不支持查找,或者此輸入流已通過調(diào)用其 close() 方法關(guān)閉,或者發(fā)生 I/O 錯誤。

available

public int available() throws IOException

返回可以從此輸入流中讀?。ɑ蛱^)的字節(jié)數(shù)的估計值,而不會被下一次調(diào)用此輸入流的方法阻塞。 下一次調(diào)用可能是同一個線程或另一個線程。 單次讀取或跳過這么多字節(jié)不會阻塞,但可能會讀取或跳過更少的字節(jié)。

此方法返回緩沖區(qū)中要讀取的剩余字節(jié)數(shù) (count - pos) 和調(diào)用 in.available() 的結(jié)果之和。

覆蓋:

在類 FilterInputStream 中可用

返回:

估計可以從該輸入流中讀?。ɑ蛱^)而不阻塞的字節(jié)數(shù)。

Throws:

Throw名稱 Throw描述
IOException 如果此輸入流已通過調(diào)用其 close() 方法關(guān)閉,或者發(fā)生 I/O 錯誤。

mark

public void mark(int readlimit)

參見 InputStream 的 mark 方法的通用約定。

覆蓋:

在類 FilterInputStream 中標(biāo)記

參數(shù):

參數(shù)名稱 參數(shù)描述
readlimit 在標(biāo)記位置無效之前可以讀取的最大字節(jié)數(shù)。

reset

public void reset() throws IOException

參見 InputStream 的 reset 方法的通用約定。

如果 markpos 為 -1(未設(shè)置標(biāo)記或標(biāo)記已失效),則拋出 IOException。 否則,將 pos 設(shè)置為等于 markpos。

覆蓋:

在類 FilterInputStream 中重置

Throws:

Throw名稱 Throw描述
IOException 如果此流尚未被標(biāo)記,或者如果標(biāo)記已失效,或者流已通過調(diào)用其 close() 方法關(guān)閉,或者發(fā)生 I/O 錯誤。

markSupported

public boolean markSupported()

測試此輸入流是否支持 mark 和 reset 方法。 BufferedInputStream 的 markSupported 方法返回 true。

覆蓋:

類 FilterInputStream 中的 markSupported

返回:

一個布爾值,指示此流類型是否支持標(biāo)記和重置方法。

close

public void close() throws IOException

關(guān)閉此輸入流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源。 關(guān)閉流后,進(jìn)一步的 read()、available()、reset() 或 skip() 調(diào)用將引發(fā) IOException。 關(guān)閉以前關(guān)閉的流沒有效果。

指定者:

在接口 AutoCloseable 中關(guān)閉

指定者:

在接口Closeable中關(guān)閉

覆蓋:

在類 FilterInputStream 中關(guān)閉

Throws:

Throw名稱 Throw描述
IOException 如果發(fā)生 I/O 錯誤。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號