模块 java.base
 java.io

类 ByteArrayInputStream

java.lang.Object
java.io.InputStream
java.io.ByteArrayInputStream
所有已实现的接口:
Closeable , AutoCloseable

public class ByteArrayInputStream extends InputStream
ByteArrayInputStream 包含一个内部缓冲区,其中包含可以从流中读取的字节。内部计数器跟踪 read 方法提供的下一个字节。

关闭 ByteArrayInputStream 没有任何效果。可以在流关闭后调用此类中的方法而不生成 IOException

自从:
1.0
参见:
  • 字段摘要

    字段
    修饰符和类型
    Field
    描述
    protected byte[]
    由流的创建者提供的字节数组。
    protected int
    比输入流缓冲区中最后一个有效字符大 1 的索引。
    protected int
    流中当前标记的位置。
    protected int
    要从输入流缓冲区读取的下一个字符的索引。
  • 构造方法总结

    构造方法
    构造方法
    描述
    ByteArrayInputStream(byte[] buf)
    创建一个 ByteArrayInputStream,以便它使用 buf 作为其缓冲区数组。
    ByteArrayInputStream(byte[] buf, int offset, int length)
    创建使用 buf 作为其缓冲区数组的 ByteArrayInputStream
  • 方法总结

    修饰符和类型
    方法
    描述
    int
    返回可以从此输入流中读取(或跳过)的剩余字节数。
    void
    关闭 ByteArrayInputStream 没有任何效果。
    void
    mark(int readAheadLimit)
    设置流中当前标记的位置。
    boolean
    测试此 InputStream 是否支持标记/重置。
    int
    read()
    从此输入流中读取下一个字节的数据。
    int
    read(byte[] b, int off, int len)
    从此输入流中将最多 len 字节的数据读入字节数组。
    byte[]
    从输入流中读取所有剩余字节。
    int
    readNBytes(byte[] b, int off, int len)
    从输入流中将请求的字节数读取到给定的字节数组中。
    void
    将缓冲区重置为标记位置。
    long
    skip(long n)
    跳过来自该输入流的 n 个字节的输入。

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

    nullInputStream, read, readNBytes, skipNBytes, transferTo

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

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

    • buf

      protected byte[] buf
      由流的创建者提供的字节数组。元素 buf[0]buf[count-1] 是唯一可以从流中读取的字节;元素 buf[pos] 是要读取的下一个字节。
    • pos

      protected int pos
      要从输入流缓冲区读取的下一个字符的索引。该值应始终为非负值且不大于 count 的值。下一个要从输入流缓冲区读取的字节将是 buf[pos]
    • mark

      protected int mark
      流中当前标记的位置。 ByteArrayInputStream 对象在构造时默认标记在位置零。它们可以通过 mark() 方法标记在缓冲区内的另一个位置。当前缓冲区位置由 reset() 方法设置为此点。

      如果未设置标记,则标记的值是传递给构造方法的偏移量(如果未提供偏移量,则为 0)。

      自从:
      1.1
    • count

      protected int count
      比输入流缓冲区中最后一个有效字符大 1 的索引。该值应始终为非负数且不大于 buf 的长度。它比 buf 中可以从输入流缓冲区读取的最后一个字节的位置大 1。
  • 构造方法详细信息

    • ByteArrayInputStream

      public ByteArrayInputStream(byte[] buf)
      创建一个 ByteArrayInputStream,以便它使用 buf 作为其缓冲区数组。不复制缓冲区数组。 pos的初始值为0count的初始值为buf的长度。
      参数:
      buf - 输入缓冲器。
    • ByteArrayInputStream

      public ByteArrayInputStream(byte[] buf, int offset, int length)
      创建使用 buf 作为其缓冲区数组的 ByteArrayInputStreampos的初始值为offsetcount的初始值为offset+lengthbuf.length的最小值。不复制缓冲区数组。缓冲区的标记设置为指定的偏移量。
      参数:
      buf - 输入缓冲器。
      offset - 要读取的第一个字节在缓冲区中的偏移量。
      length - 从缓冲区读取的最大字节数。
  • 方法详情

    • read

      public int read()
      从此输入流中读取下一个字节的数据。值字节作为 int0255 范围内返回。如果因为已到达流的末尾而没有可用字节,则返回值 -1

      read 方法无法阻止。

      指定者:
      read 在类 InputStream
      返回:
      下一个数据字节,如果到达流的末尾则为 -1
    • read

      public int read(byte[] b, int off, int len)
      从此输入流中将最多 len 字节的数据读入字节数组。如果 pos 等于 count ,则返回 -1 以指示文件结束。否则,读取的字节数 k 等于 lencount-pos 中的较小者。如果 k 为正,则字节 buf[pos]buf[pos+k-1] 将以 System.arraycopy 执行的方式复制到 b[off]b[off+k-1] 中。值 k 添加到 pos 并返回 k

      InputStreamoverridden method 不同,如果已到达流的末尾,则此方法返回 -1 而不是零和 len == 0

      read 方法无法阻止。

      重写:
      read 在类 InputStream
      参数:
      b - 读取数据的缓冲区。
      off - 写入数据的数组 b 中的起始偏移量。
      len - 要读取的最大字节数。
      返回:
      读入缓冲区的字节总数,如果因为已到达流的末尾而没有更多数据,则为 -1
      抛出:
      NullPointerException - 如果 bnull
      IndexOutOfBoundsException - 如果 off 为负,len 为负,或者 len 大于 b.length - off
      参见:
    • readAllBytes

      public byte[] readAllBytes()
      从类复制的描述:InputStream
      从输入流中读取所有剩余字节。此方法会阻塞,直到读取完所有剩余字节并检测到流结束,或者抛出异常。此方法不会关闭输入流。

      当此流到达流的末尾时,进一步调用此方法将返回一个空字节数组。

      请注意,此方法适用于方便将所有字节读入字节数组的简单情况。它不适用于读取具有大量数据的输入流。

      输入流为异步关闭,或读取期间中断的线程,是高度特定于输入流的,因此未指定。

      如果从输入流读取时发生 I/O 错误,那么它可能会在读取了一些(但不是全部)字节后这样做。因此,输入流可能不在流的末尾并且可能处于不一致状态。强烈建议在发生 I/O 错误时立即关闭流。

      重写:
      readAllBytes 在类 InputStream
      返回:
      包含从此输入流读取的字节的字节数组
    • readNBytes

      public int readNBytes(byte[] b, int off, int len)
      从类复制的描述:InputStream
      从输入流中将请求的字节数读取到给定的字节数组中。此方法会阻塞,直到读取了 len 字节的输入数据、检测到流结束或抛出异常。返回实际读取的字节数,可能为零。此方法不会关闭输入流。

      如果在读取 len 字节之前到达流末尾,则将返回读取的实际字节数。当此流到达流的末尾时,此方法的进一步调用将返回零。

      如果 len 为零,则不读取任何字节并返回 0;否则,将尝试读取最多 len 个字节。

      读取的第一个字节存储到元素 b[off] 中,下一个字节存储到 b[off+1] 中,依此类推。读取的字节数最多等于 len 。让k是实际读取的字节数;这些字节将存储在元素 b[off]b[off+k-1],留下元素 b[off+k]b[off+len-1] 不受影响。

      输入流为异步关闭,或读取期间中断的线程,是高度特定于输入流的,因此未指定。

      如果从输入流读取时发生 I/O 错误,那么它可能会在 b 的一些(但不是全部)字节已用输入流中的数据更新后执行此操作。因此,输入流和 b 可能处于不一致状态。强烈建议在发生 I/O 错误时立即关闭流。

      重写:
      readNBytes 在类 InputStream
      参数:
      b - 读取数据的字节数组
      off - 写入数据的 b 中的起始偏移量
      len - 要读取的最大字节数
      返回:
      读入缓冲区的实际字节数
    • skip

      public long skip(long n)
      跳过来自该输入流的 n 个字节的输入。如果到达输入流的末尾,可能会跳过更少的字节。要跳过的实际字节数 k 等于 ncount-pos 中的较小者。值 k 添加到 pos 并返回 k
      重写:
      skip 在类 InputStream
      参数:
      n - 要跳过的字节数。
      返回:
      实际跳过的字节数。
      参见:
    • available

      public int available()
      返回可以从此输入流中读取(或跳过)的剩余字节数。

      返回的值为 count - pos ,这是要从输入缓冲区中读取的剩余字节数。

      重写:
      available 在类 InputStream
      返回:
      可以从此输入流读取(或跳过)而不会阻塞的剩余字节数。
    • markSupported

      public boolean markSupported()
      测试此 InputStream 是否支持标记/重置。
      重写:
      markSupported 在类 InputStream
      实现要求:
      ByteArrayInputStreammarkSupported 方法总是返回 true
      返回:
      true
      自从:
      1.1
      参见:
    • mark

      public void mark(int readAheadLimit)
      设置流中当前标记的位置。 ByteArrayInputStream 对象在构造时默认标记在位置零。通过这种方法,它们可能被标记在缓冲区内的另一个位置。

      如果未设置标记,则标记的值是传递给构造方法的偏移量(如果未提供偏移量,则为 0)。

      注意:这个类的 readAheadLimit 没有意义。

      重写:
      mark 在类 InputStream
      参数:
      readAheadLimit - 在标记位置失效之前可以读取的最大字节数。
      自从:
      1.1
      参见:
    • reset

      public void reset()
      将缓冲区重置为标记位置。除非在构造方法中标记了另一个位置或指定了偏移量,否则标记的位置为 0。
      重写:
      reset 在类 InputStream
      参见:
    • close

      public void close() throws IOException
      关闭 ByteArrayInputStream 没有任何效果。可以在流关闭后调用此类中的方法而不生成 IOException
      指定者:
      close 在接口 AutoCloseable
      指定者:
      close 在接口 Closeable
      重写:
      close 在类 InputStream
      抛出:
      IOException - 如果发生 I/O 错误。