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 错误。 |