Module java.base
Package java.io

Class PushbackInputStream

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

public class PushbackInputStream extends FilterInputStream
PushbackInputStream 添加了对另一个输入流的功能,即能够“推回”或“未读”字节,通过将推回的字节存储在内部缓冲区中。在代码片段需要读取由特定字节值分隔的不定数量数据字节的情况下,这是很方便的;在读取终止字节后,代码片段可以“未读”它,这样输入流上的下一个读取操作将重新读取被推回的字节。例如,表示标识符构成字符的字节可能由表示运算符字符的字节终止;一个负责仅读取标识符的方法可以读取直到看到运算符,然后将运算符推回以便重新读取。
自版本:
1.0
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected byte[]
    buf
    推回缓冲区。
    protected int
    pos
    下一个将被读取的字节在推回缓冲区内的位置。

    Fields declared in class java.io.FilterInputStream

    in
  • Constructor Summary

    Constructors
    Constructor
    Description
    创建一个带有1字节推回缓冲区的PushbackInputStream,并保存其参数,输入流in,以供以后使用。
    创建一个具有指定size推回缓冲区的PushbackInputStream,并保存其参数,输入流in,以供以后使用。
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    返回可以从此输入流读取(或跳过)的字节数的估计值,而不会被下一次对此输入流的方法调用阻塞。
    void
    close()
    关闭此输入流并释放与流相关的任何系统资源。
    void
    mark(int readlimit)
    在此输入流中标记当前位置。
    boolean
    检查此输入流是否支持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)
    通过将其复制到推回缓冲区的前面,将一个字节推回。

    Methods declared in class java.io.FilterInputStream

    read

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • buf

      protected byte[] buf
      推回缓冲区。
      自版本:
      1.1
    • pos

      protected int pos
      下一个将被读取的字节在推回缓冲区内的位置。当缓冲区为空时,pos等于buf.length;当缓冲区满时,pos等于零。
      自版本:
      1.1
  • Constructor Details

    • 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 - 将从中读取字节的输入流。
  • Method Details

    • read

      public int read() throws IOException
      从此输入流读取下一个数据字节。值字节作为int在范围0255内返回。如果没有字节可用,因为已到达流的末尾,则返回值-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方法首先跳过推回缓冲区中的字节(如果有)。然后调用基础输入流的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方法时的位置。

      PushbackInputStreamreset方法除了抛出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错误。
      参见: