java.lang.Object java.io.InputStream java.io.FilterInputStream java.io.PushbackInputStream
public class PushbackInputStream
PushbackInputStream
为另一个输入流添加性能,即“推回 (push back)”或“取消读取 (unread)”一个字节的能力。在代码片段可以很方便地读取由特定字节值分隔的不定数量的数据字节时,这很有用;在读取终止字节后,代码片段可以“取消读取”该字节,这样,输入流上的下一个读取操作将会重新读取被推回的字节。例如,表示构成标识符字符的字节可能由表示操作符字符的字节终止;用于读取一个标识符的方法可以读取到遇到操作符为止,然后将该操作符推回以进行重读。
字段摘要 | |
---|---|
protected byte[] |
buf 推回缓冲区。 |
protected int |
pos 推回缓冲区中的位置,将读取该位置的下一个字节。 |
从类 java.io.FilterInputStream 继承的字段 |
---|
in |
构造方法摘要 | |
---|---|
PushbackInputStream(InputStream in) 创建 PushbackInputStream 并保存其参数(即输入流 in ),以供将来使用。 |
|
PushbackInputStream(InputStream in, int size) 使用指定 size 的推回缓冲区创建 PushbackInputStream ,并保存其参数(即输入流 in ),以供将来使用。 |
方法摘要 | |
---|---|
int |
available() 返回可以不受下一次调用此输入流的方法阻塞地从此输入流读取(或跳过)的估计字节数。 |
void |
close() 关闭此输入流并释放与该流关联的所有系统资源。 |
void |
mark(int readlimit) 在此输入流中标记当前的位置。 |
boolean |
markSupported() 测试此输入流是否支持 mark 和 reset 方法,此输入流不支持这两个方法。 |
int |
read() 从此输入流中读取下一个数据字节。 |
int |
read(byte[] b, int off, int len) 从此输入流将最多 len 个数据字节读入 byte 数组。 |
void |
reset() 将此流重新定位到最后一次对此输入流调用 mark 方法时的位置。 |
long |
skip(long n) 从此输入流中跳过并丢弃 n 个数据字节。 |
void |
unread(byte[] b) 推回一个 byte 数组:将其复制到推回缓冲区之前。 |
void |
unread(byte[] b, int off, int len) 推回 byte 数组的某一部分:将其复制到推回缓冲区之前。 |
void |
unread(int b) 推回一个字节:将其复制到推回缓冲区之前。 |
从类 java.io.FilterInputStream 继承的方法 |
---|
read |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
字段详细信息 |
---|
protected byte[] buf
protected int pos
pos
等于
buf.length
;缓冲区已满时,
pos
等于 0。
构造方法详细信息 |
---|
public PushbackInputStream(InputStream in, int size)
size
的推回缓冲区创建
PushbackInputStream
,并保存其参数(即输入流
in
),以供将来使用。最初,不存在推回字节(字段
pushBack
被初始化为
-1
)。
in
- 从中读取字节的输入流。
size
- 推回缓冲区的大小。
IllegalArgumentException
- 如果 size <= 0
public PushbackInputStream(InputStream in)
PushbackInputStream
并保存其参数(即输入流
in
),以供将来使用。最初,不存在推回字节(字段
pushBack
被初始化为
-1
)。
in
- 从中读取字节的输入流。
方法详细信息 |
---|
public int read() throws IOException
int
形式返回
0
到
255
范围内字节值。如果因为已经到达流末尾而没有可用的字节,则返回值
-1
。在输入数据可用、检测到流末尾或者抛出异常之前,此方法一直阻塞。
此方法返回最近一次推回的字节(如果有),否则将调用其底层输入流的 read
方法,并返回该方法返回的任何值。
FilterInputStream
中的
read
-1
。
IOException
- 如果已调用其
close()
方法关闭此输入流,或者发生 I/O 错误。
InputStream.read()
public int read(byte[] b, int off, int len) throws IOException
len
个数据字节读入 byte 数组。此方法首先读取所有推回字节;然后,如果读取的字节数少于
len
个字节,那么它将从底层输入流中读取字节。如果
len
不为 0,那么在至少 1 个输入字节可用之前,该方法将一直阻塞;否则,不读取任何字节并返回
0
。
FilterInputStream
中的
read
b
- 读入数据的缓冲区。
off
- 目标数组
b
中的初始偏移量。
len
- 读取的最大字节数。
-1
。
NullPointerException
- 如果
b
为
null
。
IndexOutOfBoundsException
- 如果
off
为负,
len
为负,或者
len
大于
b.length - off
IOException
- 如果已调用其
close()
方法关闭此输入流,或者发生 I/O 错误。
InputStream.read(byte[], int, int)
public void unread(int b) throws IOException
(byte)b
。
b
- 要推回其低位字节的
int
值。
IOException
- 如果推回缓冲区中没有足够的空间来存储字节,或者已调用其
close()
方法关闭此输入流。
public void unread(byte[] b, int off, int len) throws IOException
b[off]
,该字节之后的字节的值将为
b[off+1]
,依此类推。
b
- 要推回的 byte 数组。
off
- 数据的初始偏移量。
len
- 要推回的字节数。
IOException
- 如果推回缓冲区中没有足够的空间来存储指定字节数,或者已调用其
close()
方法关闭此输入流。
public void unread(byte[] b) throws IOException
b[0]
,该字节之后的字节的值将为
b[1]
,依此类推。
b
- 要推回的 byte 数组
IOException
- 如果推回缓冲区中没有足够的空间来存储指定字节数,或者已调用其
close()
方法关闭此输入流。
public int available() throws IOException
该方法返回已被推回的字节数与 available
返回的值之和。
FilterInputStream
中的
available
IOException
- 如果已调用其
close()
方法关闭此输入流,或者发生 I/O 错误。
FilterInputStream.in
,
InputStream.available()
public long skip(long n) throws IOException
n
个数据字节。由于多种原因,
skip
方法结束时跳过的字节数可能少于该数,也可能为 0。如果
n
为负,则不跳过任何字节。
PushbackInputStream
的 skip
方法首先跳过推回缓冲区中的字节(如果有)。如果需要跳过更多字节,那么它将调用底层输入流的 skip
方法。返回跳过的实际字节数。
FilterInputStream
中的
skip
n
- 要跳过的字节数。
IOException
- 如果流不支持查找操作,或者已调用其
close()
方法关闭,或者发生 I/O 错误。
FilterInputStream.in
,
InputStream.skip(long n)
public boolean markSupported()
mark
和
reset
方法,此输入流不支持这两个方法。
FilterInputStream
中的
markSupported
false
,因为此类不支持
mark
和
reset
方法。
InputStream.mark(int)
,
InputStream.reset()
public void mark(int readlimit)
PushbackInputStream
的 mark
方法不执行任何操作。
FilterInputStream
中的
mark
readlimit
- 在标记位置变无效前可以读取字节的最大限制。
InputStream.reset()
public void reset() throws IOException
mark
方法时的位置。
类 PushbackInputStream
的方法 reset
不执行任何操作,只抛出 IOException
。
FilterInputStream
中的
reset
IOException
- 如果调用此方法。
InputStream.mark(int)
,
IOException
public void close() throws IOException
Closeable
中的
close
FilterInputStream
中的
close
IOException
- 如果发生 I/O 错误。
FilterInputStream.in