- java.lang.Object
-
- java.io.InputStream
-
- java.io.FilterInputStream
-
- java.io.PushbackInputStream
-
- 实现的所有接口
-
Closeable,AutoCloseable
public class PushbackInputStream extends FilterInputStream
PushbackInputStream将功能添加到另一个输入流,即通过将推回的字节存储在内部缓冲区中来“推回”或“未读”字节的能力。 这在一个代码片段方便读取由特定字节值分隔的无限数量的数据字节的情况下很有用。 在读取终止字节之后,代码片段可以“解读”它,以便输入流上的下一个读取操作将重新读取被推回的字节。 例如,表示构成标识符的字符的字节可以由表示操作符的字节终止; 一个方法,其工作是只读取一个标识符,可以读取,直到它看到操作员,然后推回操作员重新读取。- 从以下版本开始:
- 1.0
-
-
字段汇总
字段 变量和类型 字段 描述 protected byte[]buf推回缓冲区。protected intpos回推缓冲区中的位置,将从中读取下一个字节。-
声明的属性在类 java.io.FilterInputStream
in
-
-
构造方法摘要
构造方法 构造器 描述 PushbackInputStream(InputStream in)创建一个带有1字节回送缓冲区的PushbackInputStream,并保存其参数(输入流in)供以后使用。PushbackInputStream(InputStream in, int size)创建PushbackInputStream带有指定的推回缓冲器size,并保存其参数,输入流in,供以后使用。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 intavailable()返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。voidclose()关闭此输入流并释放与该流关联的所有系统资源。voidmark(int readlimit)标记此输入流中的当前位置。booleanmarkSupported()测试此输入流是否支持mark和reset方法,但不支持。intread()从此输入流中读取下一个数据字节。intread(byte[] b, int off, int len)从此输入流len最多len字节的数据读入一个字节数组。voidreset()将此流重新定位到上次在此输入流上调用mark方法时的位置。longskip(long n)跳过并丢弃此输入流中的n字节数据。voidunread(byte[] b)通过将字节数组复制到回送缓冲区的前面来推回字节数组。voidunread(byte[] b, int off, int len)通过将其复制到回送缓冲区的前面来推回一部分字节数组。voidunread(int b)通过将字节复制到回送缓冲区的前面来推回一个字节。-
声明方法的类 java.io.FilterInputStream
read
-
声明方法的类 java.io.InputStream
nullInputStream, readAllBytes, readNBytes, readNBytes, transferTo
-
-
-
-
构造方法详细信息
-
PushbackInputStream
public PushbackInputStream(InputStream in, int size)
创建PushbackInputStream带有指定的推回缓冲器size,并保存其参数,输入流in,供以后使用。 最初,回推缓冲区为空。- 参数
-
in- 将从中读取字节的输入流。 -
size- 回推缓冲区的大小。 - 异常
-
IllegalArgumentException- 如果size <= 0 - 从以下版本开始:
- 1.1
-
PushbackInputStream
public PushbackInputStream(InputStream in)
使用1字节的回送缓冲区创建PushbackInputStream,并保存其参数(输入流in)供以后使用。 最初,回推缓冲区为空。- 参数
-
in- 将从中读取字节的输入流。
-
-
方法详细信息
-
read
public int read() throws IOException从此输入流中读取下一个数据字节。 值字节作为int返回,范围为0至255。 如果由于到达流末尾而没有可用字节,则返回值-1。 此方法将阻塞,直到输入数据可用,检测到流的末尾或抛出异常。此方法返回最近推回的字节(如果有),否则调用其基础输入流的
read方法并返回该方法返回的任何值。- 重写:
-
read在类FilterInputStream - 结果
-
数据的下一个字节,如果已到达流的末尾,
-1。 - 异常
-
IOException- 如果通过调用其close()方法关闭此输入流,或发生I / O错误。 - 另请参见:
-
InputStream.read()
-
read
public int read(byte[] b, int off, int len) throws IOException从此输入流len最多len字节的数据读入一个字节数组。 该方法首先读取任何推回的字节; 之后,如果读取的字节少于len,则从基础输入流中读取。 如果len不为零,则该方法将阻塞,直到至少有1个字节的输入可用; 否则,不读取任何字节,并返回0。- 重写:
-
read类FilterInputStream - 参数
-
b- 读取数据的缓冲区。 -
off- 目标阵列b的起始偏移量 -
len- 读取的最大字节数。 - 结果
-
读入缓冲区的总字节数,如果由于已到达流末尾而没有更多数据,
-1。 - 异常
-
NullPointerException- 如果b是null。 -
IndexOutOfBoundsException- 如果off为负数,则len为负数,或len为大于b.length - off -
IOException- 如果通过调用其close()方法关闭此输入流,或发生I / O错误。 - 另请参见:
-
InputStream.read(byte[], int, int)
-
unread
public void unread(int b) throws IOException通过将字节复制到回送缓冲区的前面来推回一个字节。 此方法返回后,要读取的下一个字节将具有值(byte)b。- 参数
-
b- 要推回低位字节的int值。 - 异常
-
IOException- 如果字节的回送缓冲区中没有足够的空间,或者通过调用其close()方法关闭了此输入流。
-
unread
public void unread(byte[] b, int off, int len) throws IOException通过将其复制到回送缓冲区的前面来推回一部分字节数组。 返回此方法后,要读取的下一个字节将具有值b[off],之后的字节将具有值b[off+1],依此类推。- 参数
-
b- 要推回的字节数组。 -
off- 数据的起始偏移量。 -
len- 要回退的字节数。 - 异常
-
IOException- 如果回IOException缓冲区中没有足够的空间用于指定的字节数,或者已通过调用其close()方法关闭此输入流。 - 从以下版本开始:
- 1.1
-
unread
public void unread(byte[] b) throws IOException通过将字节数组复制到回送缓冲区的前面来推回字节数组。 在此方法返回后,要读取的下一个字节将具有值b[0],之后的字节将具有值b[1],依此类推。- 参数
-
b- 要推回的字节数组 - 异常
-
IOException- 如果回IOException缓冲区中没有足够的空间用于指定的字节数,或者已通过调用其close()方法关闭此输入流。 - 从以下版本开始:
- 1.1
-
available
public int available() throws IOException返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。 下一次调用可能是同一个线程或另一个线程。 单个读取或跳过这么多字节不会阻塞,但可以读取或跳过更少的字节。该方法返回已推回的字节数和
available返回的值之和。- 重写:
-
available类FilterInputStream - 结果
- 无阻塞地从输入流中读取(或跳过)的字节数。
- 异常
-
IOException- 如果通过调用其close()方法关闭此输入流,或发生I / O错误。 - 另请参见:
-
FilterInputStream.in,InputStream.available()
-
skip
public long skip(long n) throws IOException跳过并从此输入流中丢弃n字节的数据。 出于各种原因,skip方法可能最终跳过一些较小数量的字节,可能为零。 如果n为负数,则不跳过任何字节。skip方法PushbackInputStream首先跳过推回缓冲区中的字节(如果有的话)。 然后,如果需要跳过更多字节,则调用基础输入流的skip方法。 返回跳过的实际字节数。- 重写:
-
skip在类FilterInputStream - 参数
-
n- 要跳过的字节数。 - 结果
- 跳过的实际字节数。
- 异常
-
IOException- 如果通过调用其close()方法关闭了流,则in.skip(n)将抛出IOException,或者发生I / O错误。 - 从以下版本开始:
- 1.2
- 另请参见:
-
FilterInputStream.in,InputStream.skip(long n)
-
markSupported
public boolean markSupported()
测试此输入流是否支持mark和reset方法。- 重写:
-
markSupported在类FilterInputStream - 结果
-
false,因为这个类不支持mark和reset方法。 - 另请参见:
-
InputStream.mark(int),InputStream.reset()
-
mark
public void mark(int readlimit)
标记此输入流中的当前位置。mark方法PushbackInputStream什么都不做。- 重写:
-
mark类FilterInputStream - 参数
-
readlimit- 标记位置变为无效之前可读取的最大字节数。 - 另请参见:
-
InputStream.reset()
-
reset
public void reset() throws IOException将此流重新定位到上次在此输入流上调用mark方法时的位置。类
PushbackInputStream的方法reset除了抛出IOException之外什么都不IOException。- 重写:
-
reset在类FilterInputStream - 异常
-
IOException- 如果调用此方法。 - 另请参见:
-
InputStream.mark(int),IOException
-
close
public void close() throws IOException关闭此输入流并释放与该流关联的所有系统资源。 关闭流后,进一步的read(),unread(),available(),reset()或skip()调用将抛出IOException。 关闭先前关闭的流无效。- Specified by:
-
close在界面AutoCloseable - Specified by:
-
close在界面Closeable - 重写:
-
close类FilterInputStream - 异常
-
IOException- 如果发生I / O错误。 - 另请参见:
-
FilterInputStream.in
-
-