Module  java.base
软件包  java.io

Class PushbackInputStream

  • All Implemented Interfaces:
    CloseableAutoCloseable


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

      Fields  
      Modifier and Type Field 描述
      protected byte[] buf
      推回缓冲区。
      protected int pos
      推回缓冲区中的位置,从该位置读取下一个字节。
    • 构造方法摘要

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

      所有方法  接口方法  具体的方法 
      Modifier and Type 方法 描述
      int available​()
      从下一次调用此输入流的方法返回可从该输入流读取(或跳过)的字节数,而不会阻塞。
      void close​()
      关闭此输入流并释放与流相关联的任何系统资源。
      void mark​(int readlimit)
      标记此输入流中的当前位置。
      boolean markSupported​()
      测试这个输入流是否支持 markreset方法,而不是。
      int read​()
      从该输入流读取下一个数据字节。
      int read​(byte[] b, int off, int 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)
        使用指定的size的推回缓冲区创建一个PushbackInputStream ,并保存其参数,输入流in供以后使用。 最初,推回缓冲区为空。
        参数
        in - 读取字节的输入流。
        size - 推回缓冲区的大小。
        异常
        IllegalArgumentException - 如果是 size <= 0
        从以下版本开始:
        1.1
      • PushbackInputStream

        public PushbackInputStream​(InputStream in)
        创建一个PushbackInputStream与1字节的推回缓冲区,并保存其参数,输入流in供以后使用。 最初,推回缓冲区为空。
        参数
        in - 读取字节的输入流。
    • 方法详细信息

      • read

        public int read​()
                 throws IOException
        从该输入流读取下一个数据字节。 值字节返回int 0255 如果没有字节可用,因为已达到流的末尾,则返回值-1 该方法阻塞直到输入数据可用,检测到流的结尾,或抛出异常。

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

        重写:
        readFilterInputStream
        结果
        数据的下一个字节,如果已经达到流的末尾, -1
        异常
        IOException - 如果此输入流已通过调用其 close()方法关闭,或发生I / O错误。
        另请参见:
        InputStream.read()
      • 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错误。
        另请参见:
        InputStream.read(byte[], int, int)
      • unread

        public void unread​(int b)
                    throws IOException
        通过将其复制到推回缓冲区的前端来推回一个字节。 此方法返回后,要读取的下一个字节将具有值(byte)b
        参数
        b - int低位字节推回的值为 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方法。 返回实际跳过的字节数。

        重写:
        skipFilterInputStream
        参数
        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