模块  java.base
软件包  java.io

Class PushbackInputStream

  • 实现的所有接口
    CloseableAutoCloseable

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

      字段  
      变量和类型 字段 描述
      protected byte[] buf
      推回缓冲区。
      protected int pos
      回推缓冲区中的位置,将从中读取下一个字节。
    • 构造方法摘要

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

      所有方法  实例方法 具体的方法 
      变量和类型 方法 描述
      int available()
      返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。
      void close()
      关闭此输入流并释放与该流关联的所有系统资源。
      void mark​(int readlimit)
      标记此输入流中的当前位置。
      boolean markSupported()
      测试此输入流是否支持 markreset方法,但不支持。
      int read()
      从此输入流中读取下一个数据字节。
      int read​(byte[] b, int off, int len)
      从此输入流 len最多 len字节的数据读入一个字节数组。
      void reset()
      将此流重新定位到上次在此输入流上调用 mark方法时的位置。
      long skip​(long n)
      跳过并丢弃此输入流中的 n字节数据。
      void unread​(byte[] b)
      通过将字节数组复制到回送缓冲区的前面来推回字节数组。
      void unread​(byte[] b, int off, int len)
      通过将其复制到回送缓冲区的前面来推回一部分字节数组。
      void unread​(int b)
      通过将字节复制到回送缓冲区的前面来推回一个字节。
    • 字段详细信息

      • buf

        protected byte[] buf
        推回缓冲区。
        从以下版本开始:
        1.1
      • pos

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

      • 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返回,范围为0255 如果由于到达流末尾而没有可用字节,则返回值-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
        重写:
        readFilterInputStream
        参数
        b - 读取数据的缓冲区。
        off - 目标阵列 b的起始偏移量
        len - 读取的最大字节数。
        结果
        读入缓冲区的总字节数,如果由于已到达流末尾而没有更多数据, -1
        异常
        NullPointerException - 如果 bnull
        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返回的值之和。

        重写:
        availableFilterInputStream
        结果
        无阻塞地从输入流中读取(或跳过)的字节数。
        异常
        IOException - 如果通过调用其 close()方法关闭此输入流,或发生I / O错误。
        另请参见:
        FilterInputStream.inInputStream.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.inInputStream.skip(long n)
      • mark

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

        mark方法PushbackInputStream什么都不做。

        重写:
        markFilterInputStream
        参数
        readlimit - 标记位置变为无效之前可读取的最大字节数。
        另请参见:
        InputStream.reset()
      • close

        public void close()
                   throws IOException
        关闭此输入流并释放与该流关联的所有系统资源。 关闭流后,进一步的read(),unread(),available(),reset()或skip()调用将抛出IOException。 关闭先前关闭的流无效。
        Specified by:
        close在界面 AutoCloseable
        Specified by:
        close在界面 Closeable
        重写:
        closeFilterInputStream
        异常
        IOException - 如果发生I / O错误。
        另请参见:
        FilterInputStream.in