模块 java.base
 java.io

类 BufferedInputStream

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

public class BufferedInputStream extends FilterInputStream
BufferedInputStream 向另一个输入流添加功能,即缓冲输入和支持 markreset 方法的能力。创建 BufferedInputStream 时,会创建一个内部缓冲区数组。当流中的字节被读取或跳过时,内部缓冲区会根据需要从包含的输入流中重新填充,一次填充多个字节。 mark 操作会记住输入流中的一个点,而 reset 操作会导致在从包含的输入流中获取新字节之前重新读取自最近的 mark 操作以来读取的所有字节。
自从:
1.0
  • 字段摘要

    字段
    修饰符和类型
    Field
    描述
    protected byte[]
    存储数据的内部缓冲区数组。
    protected int
    索引比缓冲区中最后一个有效字节的索引大 1。
    protected int
    在对 reset 方法的后续调用失败之前调用 mark 方法后允许的最大预读。
    protected int
    最后一次调用 mark 方法时 pos 字段的值。
    protected int
    缓冲区中的当前位置。

    在类 java.io.FilterInputStream 中声明的字段

    in
  • 构造方法总结

    构造方法
    构造方法
    描述
    创建一个 BufferedInputStream 并保存其参数,即输入流 in ,供以后使用。
    创建具有指定缓冲区大小的 BufferedInputStream,并保存其参数,即输入流 in,供以后使用。
  • 方法总结

    修饰符和类型
    方法
    描述
    int
    返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次为此输入流的方法调用阻塞。
    void
    关闭此输入流并释放与该流关联的所有系统资源。
    void
    mark(int readlimit)
    参见InputStreammark方法的总契约。
    boolean
    测试此输入流是否支持 markreset 方法。
    int
    read()
    参见InputStreamread方法的总契约。
    int
    read(byte[] b, int off, int len)
    从此字节输入流中读取字节到指定的字节数组,从给定的偏移量开始。
    void
    参见InputStreamreset方法的总契约。
    long
    skip(long n)
    参见InputStreamskip方法的总契约。

    在类 java.io.FilterInputStream 中声明的方法

    read

    在类 java.lang.Object 中声明的方法

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 字段详细信息

    • 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 操作将需要从包含的输入流中读取更多字节。

      参见:
    • markpos

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

      此值始终在 -1pos 范围内。如果输入流中没有标记位置,则此字段为 -1 。如果输入流中有标记位置,则 buf[markpos] 是在 reset 操作后作为输入提供的第一个字节。如果 markpos 不是 -1 ,则从位置 buf[markpos]buf[pos-1] 的所有字节都必须保留在缓冲区数组中(尽管它们可能会移动到缓冲区数组中的另一个位置,并适当调整 countposmarkpos 的值);它们可能不会被丢弃,除非并且直到 posmarkpos 之间的差异超过 marklimit

      参见:
    • marklimit

      protected int marklimit
      在对 reset 方法的后续调用失败之前调用 mark 方法后允许的最大预读。每当 posmarkpos 之间的差异超过 marklimit 时,可以通过将 markpos 设置为 -1 来删除标记。
      参见:
  • 构造方法详细信息

    • 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() throws IOException
      参见InputStreamread方法的总契约。
      重写:
      read 在类 FilterInputStream
      返回:
      下一个数据字节,如果到达流的末尾则为 -1
      抛出:
      IOException - 如果此输入流已通过调用其 close() 方法关闭,或者发生 I/O 错误。
      参见:
    • 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 错误。
      IndexOutOfBoundsException - 如果 off 为负,len 为负,或者 len 大于 b.length - off
      参见:
    • skip

      public long skip(long n) throws IOException
      参见InputStreamskip方法的总契约。
      重写:
      skip 在类 FilterInputStream
      参数:
      n - 要跳过的字节数。
      返回:
      实际跳过的字节数。
      抛出:
      IOException - 如果此输入流已通过调用其 close() 方法关闭,in.skip(n) 将抛出 IOException,或发生 I/O 错误。
      参见:
    • available

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

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

      重写:
      available 在类 FilterInputStream
      返回:
      可以从该输入流中无阻塞地读取(或跳过)的字节数的估计值。
      抛出:
      IOException - 如果此输入流已通过调用其 close() 方法关闭,或者发生 I/O 错误。
    • mark

      public void mark(int readlimit)
      参见InputStreammark方法的总契约。
      重写:
      mark 在类 FilterInputStream
      参数:
      readlimit - 在标记位置变为无效之前可以读取的最大字节数限制。
      参见:
    • reset

      public void reset() throws IOException
      参见InputStreamreset方法的总契约。

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

      重写:
      reset 在类 FilterInputStream
      抛出:
      IOException - 如果此流未被标记,或者标记已失效,或者流已通过调用其 close() 方法关闭,或者发生 I/O 错误。
      参见:
    • markSupported

      public boolean markSupported()
      测试此输入流是否支持 markreset 方法。 BufferedInputStreammarkSupported 方法返回 true
      重写:
      markSupported 在类 FilterInputStream
      返回:
      boolean 指示此流类型是否支持 markreset 方法。
      参见:
    • close

      public void close() throws IOException
      关闭此输入流并释放与该流关联的所有系统资源。流关闭后,进一步的 read()、available()、reset() 或 skip() 调用将抛出 IOException。关闭之前关闭的流没有任何效果。
      指定者:
      close 在接口 AutoCloseable
      指定者:
      close 在接口 Closeable
      重写:
      close 在类 FilterInputStream
      抛出:
      IOException - 如果发生 I/O 错误。
      参见: