鴻蒙OS PushbackInputStream

2022-10-24 17:36 更新

PushbackInputStream

java.lang.Object

|---java.io.InputStream

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

|---|---|---java.io.PushbackInputStream

public class PushbackInputStream
extends FilterInputStream

PushbackInputStream 將功能添加到另一個(gè)輸入流,即“推回”或“未讀”一個(gè)字節(jié)的能力。 這在代碼片段可以方便地讀取由特定字節(jié)值分隔的不確定數(shù)量的數(shù)據(jù)字節(jié)的情況下很有用; 讀取終止字節(jié)后,代碼片段可以“取消讀取”它,以便對(duì)輸入流的下一次讀取操作將重新讀取被推回的字節(jié)。 例如,表示構(gòu)成標(biāo)識(shí)符的字符的字節(jié)可能會(huì)以表示運(yùn)算符字符的字節(jié)結(jié)尾; 一個(gè)只讀取標(biāo)識(shí)符的方法可以讀取,直到它看到運(yùn)算符,然后將運(yùn)算符推回以重新讀取。

Since:

JDK1.0

字段摘要

修飾符和類型 字段 描述
protected byte[] buf 推回緩沖區(qū)。
protected int pos 將讀取下一個(gè)字節(jié)的回推緩沖區(qū)中的位置。
從類 java.io.FilterInputStream 繼承的字段
in

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

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

方法總結(jié)

修飾符和類型 方法 描述
int available() 返回可以從此輸入流中讀?。ɑ蛱^(guò))的字節(jié)數(shù)的估計(jì)值,而不會(huì)被下一次調(diào)用此輸入流的方法阻塞。
void close() 關(guān)閉此輸入流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源。
void mark(int readlimit) 標(biāo)記此輸入流中的當(dāng)前位置。
boolean markSupported() 測(cè)試此輸入流是否支持 mark 和 reset 方法,但它不支持。
int read() 從此輸入流中讀取數(shù)據(jù)的下一個(gè)字節(jié)。
int read(byte[] b, int off, int len) 從此輸入流中讀取最多 len 個(gè)字節(jié)的數(shù)據(jù)到一個(gè)字節(jié)數(shù)組中。
void reset() 將此流重新定位到最后一次在此輸入流上調(diào)用標(biāo)記方法時(shí)的位置。
long skip(long n) 跳過(guò)并丟棄此輸入流中的 n 字節(jié)數(shù)據(jù)。
void unread(byte[] b) 通過(guò)將字節(jié)數(shù)組復(fù)制到推回緩沖區(qū)的前面來(lái)推回它。
void unread(byte[] b, int off, int len) 通過(guò)將字節(jié)數(shù)組的一部分復(fù)制到推回緩沖區(qū)的前面來(lái)推回它。
void unread(int b) 通過(guò)將字節(jié)復(fù)制到推回緩沖區(qū)的前面來(lái)推回一個(gè)字節(jié)。
從類 java.io.FilterInputStream 繼承的方法
read
從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

字段詳細(xì)信息

buf

protected byte[] buf

推回緩沖區(qū)。

Since:

JDK1.1

pos

protected int pos

將讀取下一個(gè)字節(jié)的回推緩沖區(qū)中的位置。 當(dāng)緩沖區(qū)為空時(shí),pos等于buf.length; 當(dāng)緩沖區(qū)已滿時(shí),pos 等于 0。

Since:

JDK1.1

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

PushbackInputStream

public PushbackInputStream(InputStream in, int size)

創(chuàng)建具有指定大小的推回緩沖區(qū)的 PushbackInputStream,并保存其參數(shù),即輸入流,以供以后使用。 最初,沒(méi)有回推字節(jié)(字段 pushBack 初始化為 -1)。

參數(shù):

參數(shù)名稱 參數(shù)描述
in 將從中讀取字節(jié)的輸入流。
size 推回緩沖區(qū)的大小。

Throws:

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

Since:

JDK1.1

PushbackInputStream

public PushbackInputStream(InputStream in)

創(chuàng)建一個(gè) PushbackInputStream 并保存其參數(shù),即輸入流,以供以后使用。 最初,沒(méi)有回推字節(jié)(字段 pushBack 初始化為 -1)。

參數(shù):

參數(shù)名稱 參數(shù)描述
in 將從中讀取字節(jié)的輸入流。

方法詳情

read

public int read() throws IOException

從此輸入流中讀取數(shù)據(jù)的下一個(gè)字節(jié)。 值字節(jié)作為 int 返回,范圍為 0 到 255。如果由于到達(dá)流的末尾而沒(méi)有可用的字節(jié),則返回值 -1。 此方法會(huì)一直阻塞,直到輸入數(shù)據(jù)可用、檢測(cè)到流結(jié)束或引發(fā)異常。

此方法返回最近推回的字節(jié)(如果有),否則調(diào)用其底層輸入流的 read 方法并返回該方法返回的任何值。

覆蓋:

讀入類 FilterInputStream

返回:

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

Throws:

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

read

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

從此輸入流中讀取最多 len 個(gè)字節(jié)的數(shù)據(jù)到一個(gè)字節(jié)數(shù)組中。 此方法首先讀取任何推回的字節(jié); 之后,如果讀取的字節(jié)數(shù)少于 len,則從底層輸入流中讀取。 如果 len 不為零,則該方法會(huì)阻塞,直到至少有 1 個(gè)字節(jié)的輸入可用; 否則,不讀取任何字節(jié)并返回 0。

覆蓋:

讀入類 FilterInputStream

參數(shù):

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

返回:

讀入緩沖區(qū)的總字節(jié)數(shù),如果由于到達(dá)流的末尾而沒(méi)有更多數(shù)據(jù),則為 -1。

Throws:

Throw名稱 Throw描述
NullPointerException 如果 b 為空。
IndexOutOfBoundsException 如果 off 為負(fù)數(shù),len 為負(fù)數(shù),或者 len 大于 b.length - off
IOException 如果此輸入流已通過(guò)調(diào)用其 close() 方法關(guān)閉,或者發(fā)生 I/O 錯(cuò)誤。

unread

public void unread(int b) throws IOException

通過(guò)將字節(jié)復(fù)制到推回緩沖區(qū)的前面來(lái)推回一個(gè)字節(jié)。 此方法返回后,下一個(gè)要讀取的字節(jié)將具有值 (byte)b。

參數(shù):

參數(shù)名稱 參數(shù)描述
b 低位字節(jié)要被推回的 int 值。

Throws:

Throw名稱 Throw描述
IOException 如果回推緩沖區(qū)中沒(méi)有足夠的空間用于字節(jié),或者此輸入流已通過(guò)調(diào)用其 close() 方法關(guān)閉。

unread

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

通過(guò)將字節(jié)數(shù)組的一部分復(fù)制到推回緩沖區(qū)的前面來(lái)推回它。 此方法返回后,要讀取的下一個(gè)字節(jié)將具有值 b[off],之后的字節(jié)將具有值 b[off+1],依此類推。

參數(shù):

參數(shù)名稱 參數(shù)描述
b 要推回的字節(jié)數(shù)組。
off 數(shù)據(jù)的起始偏移量。
len 要推回的字節(jié)數(shù)。

Throws:

Throw名稱 Throw描述
IOException 如果推回緩沖區(qū)中沒(méi)有足夠空間容納指定的字節(jié)數(shù),或者此輸入流已通過(guò)調(diào)用其 close() 方法關(guān)閉。

Since:

JDK1.1

unread

public void unread(byte[] b) throws IOException

通過(guò)將字節(jié)數(shù)組復(fù)制到推回緩沖區(qū)的前面來(lái)推回它。 此方法返回后,要讀取的下一個(gè)字節(jié)將具有值 b[0],之后的字節(jié)將具有值 b[1],依此類推。

參數(shù):

參數(shù)名稱 參數(shù)描述
b 要推回的字節(jié)數(shù)組

Throws:

Throw名稱 Throw描述
IOException 如果推回緩沖區(qū)中沒(méi)有足夠空間容納指定的字節(jié)數(shù),或者此輸入流已通過(guò)調(diào)用其 close() 方法關(guān)閉。

Since:

JDK1.1

available

public int available() throws IOException

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

該方法返回已被推回的字節(jié)數(shù)和available返回的值之和。

覆蓋:

在類 FilterInputStream 中可用

返回:

可以從輸入流中讀取(或跳過(guò))而不阻塞的字節(jié)數(shù)。

Throws:

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

skip

public long skip(long n) throws IOException

跳過(guò)并丟棄此輸入流中的 n 字節(jié)數(shù)據(jù)。 由于各種原因,skip 方法最終可能會(huì)跳過(guò)一些較小的字節(jié)數(shù),可能為零。 如果 n 為負(fù)數(shù),則不跳過(guò)任何字節(jié)。

PushbackInputStream 的 skip 方法首先跳過(guò) pushback 緩沖區(qū)中的字節(jié)(如果有)。 然后,如果需要跳過(guò)更多字節(jié),它會(huì)調(diào)用底層輸入流的 skip 方法。 返回實(shí)際跳過(guò)的字節(jié)數(shù)。

覆蓋:

跳過(guò)類 FilterInputStream

參數(shù):

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

返回:

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

Throws:

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

Since:

1.2

markSupported

public boolean markSupported()

測(cè)試此輸入流是否支持 mark 和 reset 方法,但它不支持。

覆蓋:

類 FilterInputStream 中的 markSupported

返回:

false,因?yàn)榇祟惒恢С?mark 和 reset 方法。

mark

public void mark(int readlimit)

標(biāo)記此輸入流中的當(dāng)前位置。

PushbackInputStream 的 mark 方法什么都不做。

覆蓋:

在類 FilterInputStream 中標(biāo)記

參數(shù):

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

reset

public void reset() throws IOException

將此流重新定位到最后一次在此輸入流上調(diào)用標(biāo)記方法時(shí)的位置。

PushbackInputStream 類的方法 reset 除了拋出一個(gè) IOException 之外什么都不做。

覆蓋:

在類 FilterInputStream 中重置

Throws:

Throw名稱 Throw描述
IOException 如果調(diào)用此方法。

close

public void close() throws IOException

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

指定者:

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

指定者:

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

覆蓋:

在類 FilterInputStream 中關(guān)閉

Throws:

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)