模块 java.base
 java.io

类 PushbackInputStream

所有已实现的接口:
Closeable , AutoCloseable

public class PushbackInputStream extends FilterInputStream
PushbackInputStream 将功能添加到另一个输入流,即通过将推回的字节存储在内部缓冲区中来“推回”或“未读”字节的能力。这在代码片段可以方便地读取由特定字节值分隔的无限数量的数据字节的情况下很有用;读取终止字节后,代码片段可以“取消读取”它,以便输入流上的下一个读取操作将重新读取被推回的字节。例如,表示构成标识符的字符的字节可能由表示运算符字符的字节终止;一个只读取标识符的方法可以读取直到它看到运算符,然后将运算符推回以重新读取。
自从:
1.0
  • 字段摘要

    字段
    修饰符和类型
    Field
    描述
    protected byte[]
    推回缓冲区。
    protected int
    将读取下一个字节的回推缓冲区中的位置。

    在类 java.io.FilterInputStream 中声明的字段

    in
  • 构造方法总结

    构造方法
    构造方法
    描述
    创建一个带有 1 字节推送缓冲区的 PushbackInputStream,并保存其参数,即输入流 in,供以后使用。
    创建一个带有指定 size 的回推缓冲区的 PushbackInputStream,并保存其参数,即输入流 in,供以后使用。
  • 方法总结

    修饰符和类型
    方法
    描述
    int
    返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次为此输入流的方法调用阻塞。
    void
    关闭此输入流并释放与该流关联的所有系统资源。
    void
    mark(int readlimit)
    标记此输入流中的当前位置。
    boolean
    测试此输入流是否支持 markreset 方法,但它不支持。
    int
    read()
    从此输入流中读取下一个字节的数据。
    int
    read(byte[] b, int off, int len)
    从此输入流中读取最多 len 字节的数据到字节数组中。
    void
    将此流重新定位到上次对此输入流调用 mark 方法时的位置。
    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
      推回缓冲区。
      自从:
      1.1
    • pos

      protected int pos
      将读取下一个字节的回推缓冲区中的位置。当缓冲区为空时,pos等于buf.length;当缓冲区已满时,pos 等于零。
      自从:
      1.1
  • 构造方法详细信息

    • PushbackInputStream

      public PushbackInputStream(InputStream  in, int size)
      创建一个带有指定 size 的回推缓冲区的 PushbackInputStream,并保存其参数,即输入流 in,供以后使用。最初,推回缓冲区是空的。
      参数:
      in - 将从中读取字节的输入流。
      size - 推回缓冲区的大小。
      抛出:
      IllegalArgumentException - 如果 size <= 0
      自从:
      1.1
    • PushbackInputStream

      public PushbackInputStream(InputStream  in)
      创建一个带有 1 字节推送缓冲区的 PushbackInputStream,并保存其参数,即输入流 in,供以后使用。最初,推回缓冲区是空的。
      参数:
      in - 将从中读取字节的输入流。
  • 方法详情

    • read

      public int read() throws IOException
      从此输入流中读取下一个字节的数据。值字节作为 int0255 范围内返回。如果因为已到达流的末尾而没有可用字节,则返回值 -1。此方法会阻塞,直到输入数据可用、检测到流结束或抛出异常为止。

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

      重写:
      read 在类 FilterInputStream
      返回:
      下一个字节的数据,或者 -1 如果已经到达流的末尾。
      抛出:
      IOException - 如果此输入流已通过调用其 close() 方法关闭,或者发生 I/O 错误。
      参见:
    • read

      public int read(byte[] b, int off, int len) throws IOException
      从此输入流中读取最多 len 字节的数据到字节数组中。此方法首先读取任何推回的字节;之后,如果读取的字节少于 len 字节,那么它会从底层输入流中读取。如果 len 不为零,则该方法会阻塞,直到至少有 1 个字节的输入可用;否则,不读取任何字节并返回 0
      重写:
      read 在类 FilterInputStream
      参数:
      b - 读取数据的缓冲区。
      off - 目标数组中的起始偏移量 b
      len - 读取的最大字节数。
      返回:
      读入缓冲区的字节总数,如果因为已到达流的末尾而没有更多数据,则为 -1
      抛出:
      NullPointerException - 如果 bnull
      IndexOutOfBoundsException - 如果 off 为负,len 为负,或者 len 大于 b.length - off
      IOException - 如果此输入流已通过调用其 close() 方法关闭,或者发生 I/O 错误。
      参见:
    • 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 - 要推回的字节数。
      抛出:
      NullPointerException - 如果 bnull
      IOException - 如果回送缓冲区中没有足够的空间容纳指定的字节数,或者此输入流已通过调用其 close() 方法关闭。
      自从:
      1.1
    • unread

      public void unread(byte[] b) throws IOException
      通过将字节数组复制到推回缓冲区的前面来推回字节数组。此方法返回后,要读取的下一个字节的值为 b[0] ,之后的字节的值为 b[1] ,依此类推。
      参数:
      b - 要推回的字节数组
      抛出:
      NullPointerException - 如果 bnull
      IOException - 如果回送缓冲区中没有足够的空间容纳指定的字节数,或者此输入流已通过调用其 close() 方法关闭。
      自从:
      1.1
    • available

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

      该方法返回已推回的字节数与 available 返回值的总和。

      重写:
      available 在类 FilterInputStream
      返回:
      可以在不阻塞的情况下从输入流中读取(或跳过)的字节数。
      抛出:
      IOException - 如果此输入流已通过调用其 close() 方法关闭,或者发生 I/O 错误。
      参见:
    • skip

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

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

      重写:
      skip 在类 FilterInputStream
      参数:
      n - 要跳过的字节数。
      返回:
      实际跳过的字节数。
      抛出:
      IOException - 如果流已通过调用其 close() 方法关闭,in.skip(n) 将抛出 IOException,或发生 I/O 错误。
      自从:
      1.2
      参见:
    • markSupported

      public boolean markSupported()
      测试此输入流是否支持 markreset 方法,但它不支持。
      重写:
      markSupported 在类 FilterInputStream
      返回:
      false ,因为此类不支持 markreset 方法。
      参见:
    • mark

      public void mark(int readlimit)
      标记此输入流中的当前位置。

      PushbackInputStreammark 方法什么都不做。

      重写:
      mark 在类 FilterInputStream
      参数:
      readlimit - 在标记位置变为无效之前可以读取的最大字节数限制。
      参见:
    • reset

      public void reset() throws IOException
      将此流重新定位到上次对此输入流调用 mark 方法时的位置。

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

      重写:
      reset 在类 FilterInputStream
      抛出:
      IOException - 如果调用此方法。
      参见:
    • close

      public void close() throws IOException
      关闭此输入流并释放与该流关联的所有系统资源。流关闭后,进一步的 read()、unread()、available()、reset() 或 skip() 调用将抛出 IOException。关闭之前关闭的流没有任何效果。
      指定者:
      close 在接口 AutoCloseable
      指定者:
      close 在接口 Closeable
      重写:
      close 在类 FilterInputStream
      抛出:
      IOException - 如果发生 I/O 错误。
      参见: