模块  java.base
软件包  java.io

Class BufferedInputStream

  • 实现的所有接口
    CloseableAutoCloseable

    public class BufferedInputStreamextends FilterInputStream
    BufferedInputStream向另一个输入流添加功能 - 即缓冲输入并支持markreset方法的功能。 创建BufferedInputStream将创建内部缓冲区阵列。 当读取或跳过来自流的字节时,内部缓冲区根据需要从包含的输入流中重新填充,一次多个字节。 mark操作会记住输入流中的一个点,并且reset操作会导致在从包含的输入流中获取新字节之前重新读取自最近的mark操作以来读取的所有字节。
    从以下版本开始:
    1.0
    • 字段汇总

      字段  
      变量和类型 字段 描述
      protected byte[] buf
      存储数据的内部缓冲区数组。
      protected int count
      索引1大于缓冲区中最后一个有效字节的索引。
      protected int marklimit
      在后续调用 reset方法失败之前调用 mark方法后允许的最大 mark读。
      protected int markpos
      调用最后一个 mark方法时 pos字段的值。
      protected int pos
      缓冲区中的当前位置。
    • 构造方法摘要

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

      • buf

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

        protected int count
        索引1大于缓冲区中最后一个有效字节的索引。 该值始终在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之间的差异超过marklimit否则它们不会被丢弃。

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

        protected int marklimit
        在后续调用reset方法失败之前调用mark方法后允许的最大mark读。 每当posmarkpos之间的差异超过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 否则,此方法返回实际读取的字节数。

        鼓励但不要求此类的子类尝试以相同的方式读取尽可能多的字节。

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

        public long skip​(long n)          throws IOException
        参见 skip方法 InputStream的总合同。
        重写:
        skip在类 FilterInputStream
        参数
        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)
        参见 mark方法 InputStream的总合同。
        重写:
        markFilterInputStream
        参数
        readlimit - 标记位置变为无效之前可读取的最大字节数。
        另请参见:
        reset()
      • reset

        public void reset()           throws IOException
        参见reset方法InputStream的总合同。

        如果markpos-1 (未设置标记或标记已失效),则抛出IOException 否则, pos设置为markpos

        重写:
        reset在类 FilterInputStream
        异常
        IOException - 如果此流尚未标记,或者标记已失效,或者通过调用其 close()方法关闭了流,或者发生I / O错误。
        另请参见:
        mark(int)