Module  java.base
软件包  java.io

Class BufferedInputStream

  • All Implemented Interfaces:
    CloseableAutoCloseable


    public class BufferedInputStream
    extends FilterInputStream
    A BufferedInputStream为另一个输入流添加了功能,即缓冲输入并支持markreset方法的功能。 创建BufferedInputStream将创建一个内部缓冲区数组。 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节。 mark操作会记住输入流中的一个点,并且reset操作会导致从最近的mark操作读取的所有字节在从包含的输入流中取出新字节之前重新读取。
    从以下版本开始:
    1.0
    • Field Summary

      Fields  
      Modifier and Type Field 描述
      protected byte[] buf
      存储数据的内部缓冲区数组。
      protected int count
      索引一大于缓冲区中最后一个有效字节的索引。
      protected int marklimit
      读取的最大的一个电话后,允许提前 mark后续调用方法之前 reset方法失败。
      protected int markpos
      在最后一个 mark方法的时候, pos字段的值被调用。
      protected int pos
      缓冲区中的当前位置。
    • 构造方法摘要

      构造方法  
      Constructor 描述
      BufferedInputStream​(InputStream in)
      创建一个 BufferedInputStream并保存其参数,输入流 in供以后使用。
      BufferedInputStream​(InputStream in, int size)
      创建具有指定缓冲区大小的 BufferedInputStream ,并保存其参数,输入流 in供以后使用。
    • 字段详细信息

      • buf

        protected volatile byte[] buf
        存储数据的内部缓冲区数组。 必要时,可以用不同大小的另一个阵列代替。
      • count

        protected int count
        索引一大于缓冲区中最后一个有效字节的索引。 该值始终在0buf.length ; 元素buf[0]buf[count-1]包含从底层输入流获得的缓冲输入数据。
      • pos

        protected int pos
        缓冲区中的当前位置。 这是从buf数组读取的下一个字符的索引。

        该值始终在0count 如果小于count ,则buf[pos]是作为输入提供的下一个字节; 如果它等于count ,则下一个readskip操作将需要从包含的输入流读取更多的字节。

        另请参见:
        buf
      • markpos

        protected int markpos
        在调用最后一个mark方法时的pos字段的值。

        该值始终在-1pos 如果输入流中没有标记位置,则此字段为-1 如果输入流中有一个标记的位置,那么buf[markpos]reset操作后作为输入提供的第一个字节。 如果markpos不是-1 ,然后从位置的所有字节buf[markpos]通过buf[pos-1]必须保留在缓冲器阵列中(尽管它们可以被移动到缓冲器阵列中的另一个处,与适当的调整的值countpos ,和markpos ); 除非posmarkpos之间的markpos超过marklimit否则不得丢弃。

        另请参见:
        mark(int)pos
      • marklimit

        protected int marklimit
        读取的最大的一个电话后,允许提前mark后续调用方法之前reset方法失败。 无论何时posmarkpos之间的pos超过marklimit ,那么通过将markpos设置为-1 ,标记可能会下降。
        另请参见:
        mark(int)reset()
    • 构造方法详细信息

      • BufferedInputStream

        public BufferedInputStream​(InputStream in)
        创建一个BufferedInputStream并保存其参数,输入流in供以后使用。 内部缓冲区数组被创建并存储在buf
        参数
        in - 底层输入流。
      • BufferedInputStream

        public BufferedInputStream​(InputStream in,
                                   int size)
        创建具有指定缓冲区大小的BufferedInputStream ,并保存其参数,输入流in供以后使用。 长度为size的内部缓冲区阵列创建并存储在buf
        参数
        in - 底层输入流。
        size - 缓冲区大小。
        异常
        IllegalArgumentException - 如果是 size <= 0
    • 方法详细信息

      • read

        public int read​(byte[] b,
                        int off,
                        int len)
                 throws IOException
        从给定的偏移开始,将字节输入流中的字节读入指定的字节数组。

        该方法执行InputStream类相应的read方法的一般合同。 作为一个额外的方便,它尝试通过重复调用基础流的read方法来读取尽可能多的字节。 继续执行read直到满足下列条件之一为止:

        • 指定的字节数已被读取,
        • 底层流的read方法返回-1 ,表示文件末尾,或
        • 底层流的available方法返回零,表示进一步的输入请求将阻塞。
        如果基础流上的第一个read返回-1以指示文件结束,则此方法返回-1 否则,此方法返回实际读取的字节数。

        鼓励这个类的子类,但不是必需的,尝试以相同的方式读取尽可能多的字节。

        重写:
        readFilterInputStream
        参数
        b - 目的缓冲区。
        off - 开始存储字节的偏移量。
        len - 要读取的最大字节数。
        结果
        读取的字节数,如果已达到流的末尾, -1
        异常
        IOException - 如果此输入流已通过调用其 close()方法已关闭,或发生I / O错误。
        另请参见:
        FilterInputStream.in
      • skip

        public long skip​(long n)
                  throws IOException
        skipInputStream的一般合同。
        重写:
        skipFilterInputStream
        参数
        n - 要跳过的字节数。
        结果
        实际跳过的字节数。
        异常
        IOException - 如果此输入流已通过调用其 close()方法关闭,则 in.skip(n)将抛出IOException或发生I / O错误。
      • available

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

        该方法返回缓冲区中要读取的剩余字节数( count - pos )和调用in .available()的结果。

        重写:
        availableFilterInputStream
        结果
        可以从该输入流中读取(或跳过)不受阻塞的字节数的估计。
        异常
        IOException - 如果此输入流已通过调用其 close()方法关闭,或发生I / O错误。
      • mark

        public void mark​(int readlimit)
        markInputStream的一般合同。
        重写:
        markFilterInputStream
        参数
        readlimit - 标记位置无效之前可以读取的最大字节数。
        另请参见:
        reset()
      • reset

        public void reset​()
                   throws IOException
        resetInputStream的一般合同。

        如果markpos-1 (没有设置标记或标记已经无效),则抛出一个IOException 否则, pos设置为等于markpos

        重写:
        resetFilterInputStream
        异常
        IOException - 如果该流未被标记,或者如果该标记已被无效,或流已经通过调用其 close()方法而关闭,或发生I / O错误。
        另请参见:
        mark(int)
      • close

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