阅读(4220) (0)

鸿蒙OS PushbackInputStream

2022-10-17 09:49:02 更新

PushbackInputStream

java.lang.Object

|---java.io.InputStream

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

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

public class PushbackInputStream
extends FilterInputStream

PushbackInputStream 将功能添加到另一个输入流,即“推回”或“未读”一个字节的能力。 这在代码片段可以方便地读取由特定字节值分隔的不确定数量的数据字节的情况下很有用; 读取终止字节后,代码片段可以“取消读取”它,以便对输入流的下一次读取操作将重新读取被推回的字节。 例如,表示构成标识符的字符的字节可能会以表示运算符字符的字节结尾; 一个只读取标识符的方法可以读取,直到它看到运算符,然后将运算符推回以重新读取。

Since:

JDK1.0

字段摘要

修饰符和类型 字段 描述
protected byte[] buf 推回缓冲区。
protected int pos 将读取下一个字节的回推缓冲区中的位置。
从类 java.io.FilterInputStream 继承的字段
in

构造函数摘要

构造函数 描述
PushbackInputStream(InputStream in) 创建一个 PushbackInputStream 并保存其参数,即输入流,以供以后使用。
PushbackInputStream(InputStream in, int size) 创建具有指定大小的推回缓冲区的 PushbackInputStream,并保存其参数,即输入流,以供以后使用。

方法总结

修饰符和类型 方法 描述
int available() 返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。
void close() 关闭此输入流并释放与该流关联的所有系统资源。
void mark(int readlimit) 标记此输入流中的当前位置。
boolean markSupported() 测试此输入流是否支持 mark 和 reset 方法,但它不支持。
int read() 从此输入流中读取数据的下一个字节。
int read(byte[] b, int off, int len) 从此输入流中读取最多 len 个字节的数据到一个字节数组中。
void reset() 将此流重新定位到最后一次在此输入流上调用标记方法时的位置。
long skip(long n) 跳过并丢弃此输入流中的 n 字节数据。
void unread(byte[] b) 通过将字节数组复制到推回缓冲区的前面来推回它。
void unread(byte[] b, int off, int len) 通过将字节数组的一部分复制到推回缓冲区的前面来推回它。
void unread(int b) 通过将字节复制到推回缓冲区的前面来推回一个字节。
从类 java.io.FilterInputStream 继承的方法
read
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

字段详细信息

buf

protected byte[] buf

推回缓冲区。

Since:

JDK1.1

pos

protected int pos

将读取下一个字节的回推缓冲区中的位置。 当缓冲区为空时,pos等于buf.length; 当缓冲区已满时,pos 等于 0。

Since:

JDK1.1

构造函数详细信息

PushbackInputStream

public PushbackInputStream(InputStream in, int size)

创建具有指定大小的推回缓冲区的 PushbackInputStream,并保存其参数,即输入流,以供以后使用。 最初,没有回推字节(字段 pushBack 初始化为 -1)。

参数:

参数名称 参数描述
in 将从中读取字节的输入流。
size 推回缓冲区的大小。

Throws:

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

Since:

JDK1.1

PushbackInputStream

public PushbackInputStream(InputStream in)

创建一个 PushbackInputStream 并保存其参数,即输入流,以供以后使用。 最初,没有回推字节(字段 pushBack 初始化为 -1)。

参数:

参数名称 参数描述
in 将从中读取字节的输入流。

方法详情

read

public int read() throws IOException

从此输入流中读取数据的下一个字节。 值字节作为 int 返回,范围为 0 到 255。如果由于到达流的末尾而没有可用的字节,则返回值 -1。 此方法会一直阻塞,直到输入数据可用、检测到流结束或引发异常。

此方法返回最近推回的字节(如果有),否则调用其底层输入流的 read 方法并返回该方法返回的任何值。

覆盖:

读入类 FilterInputStream

返回:

数据的下一个字节,如果已到达流的末尾,则为 -1。

Throws:

Throw名称 Throw描述
IOException 如果此输入流已通过调用其 close() 方法关闭,或者发生 I/O 错误。

read

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

从此输入流中读取最多 len 个字节的数据到一个字节数组中。 此方法首先读取任何推回的字节; 之后,如果读取的字节数少于 len,则从底层输入流中读取。 如果 len 不为零,则该方法会阻塞,直到至少有 1 个字节的输入可用; 否则,不读取任何字节并返回 0。

覆盖:

读入类 FilterInputStream

参数:

参数名称 参数描述
b 读取数据的缓冲区。
off 目标数组 b 中的起始偏移量
len 读取的最大字节数。

返回:

读入缓冲区的总字节数,如果由于到达流的末尾而没有更多数据,则为 -1。

Throws:

Throw名称 Throw描述
NullPointerException 如果 b 为空。
IndexOutOfBoundsException 如果 off 为负数,len 为负数,或者 len 大于 b.length - off
IOException 如果此输入流已通过调用其 close() 方法关闭,或者发生 I/O 错误。

unread

public void unread(int b) throws IOException

通过将字节复制到推回缓冲区的前面来推回一个字节。 此方法返回后,下一个要读取的字节将具有值 (byte)b。

参数:

参数名称 参数描述
b 低位字节要被推回的 int 值。

Throws:

Throw名称 Throw描述
IOException 如果回推缓冲区中没有足够的空间用于字节,或者此输入流已通过调用其 close() 方法关闭。

unread

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

通过将字节数组的一部分复制到推回缓冲区的前面来推回它。 此方法返回后,要读取的下一个字节将具有值 b[off],之后的字节将具有值 b[off+1],依此类推。

参数:

参数名称 参数描述
b 要推回的字节数组。
off 数据的起始偏移量。
len 要推回的字节数。

Throws:

Throw名称 Throw描述
IOException 如果推回缓冲区中没有足够空间容纳指定的字节数,或者此输入流已通过调用其 close() 方法关闭。

Since:

JDK1.1

unread

public void unread(byte[] b) throws IOException

通过将字节数组复制到推回缓冲区的前面来推回它。 此方法返回后,要读取的下一个字节将具有值 b[0],之后的字节将具有值 b[1],依此类推。

参数:

参数名称 参数描述
b 要推回的字节数组

Throws:

Throw名称 Throw描述
IOException 如果推回缓冲区中没有足够空间容纳指定的字节数,或者此输入流已通过调用其 close() 方法关闭。

Since:

JDK1.1

available

public int available() throws IOException

返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。 下一次调用可能是同一个线程或另一个线程。 单次读取或跳过这么多字节不会阻塞,但可能会读取或跳过更少的字节。

该方法返回已被推回的字节数和available返回的值之和。

覆盖:

在类 FilterInputStream 中可用

返回:

可以从输入流中读取(或跳过)而不阻塞的字节数。

Throws:

Throw名称 Throw描述
IOException 如果此输入流已通过调用其 close() 方法关闭,或者发生 I/O 错误。

skip

public long skip(long n) throws IOException

跳过并丢弃此输入流中的 n 字节数据。 由于各种原因,skip 方法最终可能会跳过一些较小的字节数,可能为零。 如果 n 为负数,则不跳过任何字节。

PushbackInputStream 的 skip 方法首先跳过 pushback 缓冲区中的字节(如果有)。 然后,如果需要跳过更多字节,它会调用底层输入流的 skip 方法。 返回实际跳过的字节数。

覆盖:

跳过类 FilterInputStream

参数:

参数名称 参数描述
n 要跳过的字节数。

返回:

跳过的实际字节数。

Throws:

Throw名称 Throw描述
IOException 如果流不支持查找,或者流已通过调用其 close() 方法关闭,或者发生 I/O 错误。

Since:

1.2

markSupported

public boolean markSupported()

测试此输入流是否支持 mark 和 reset 方法,但它不支持。

覆盖:

类 FilterInputStream 中的 markSupported

返回:

false,因为此类不支持 mark 和 reset 方法。

mark

public void mark(int readlimit)

标记此输入流中的当前位置。

PushbackInputStream 的 mark 方法什么都不做。

覆盖:

在类 FilterInputStream 中标记

参数:

参数名称 参数描述
readlimit 在标记位置无效之前可以读取的最大字节数。

reset

public void reset() throws IOException

将此流重新定位到最后一次在此输入流上调用标记方法时的位置。

PushbackInputStream 类的方法 reset 除了抛出一个 IOException 之外什么都不做。

覆盖:

在类 FilterInputStream 中重置

Throws:

Throw名称 Throw描述
IOException 如果调用此方法。

close

public void close() throws IOException

关闭此输入流并释放与该流关联的所有系统资源。 关闭流后,进一步的 read()、unread()、available()、reset() 或 skip() 调用将引发 IOException。 关闭以前关闭的流没有效果。

指定者:

在接口 AutoCloseable 中关闭

指定者:

在接口Closeable中关闭

覆盖:

在类 FilterInputStream 中关闭

Throws:

Throw名称 Throw描述
IOException 如果发生 I/O 错误。