Module java.base
Package java.io

Class ByteArrayInputStream

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

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

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

自:
1.0
参见:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected byte[]
    buf
    由流的创建者提供的字节数组。
    protected int
    输入流缓冲区中最后一个有效字节的索引加一。
    protected int
    流中当前标记的位置。
    protected int
    pos
    从输入流缓冲区中读取的下一个字节的索引。
  • Constructor Summary

    Constructors
    Constructor
    Description
    ByteArrayInputStream(byte[] buf)
    创建一个ByteArrayInputStream,使其使用buf作为其缓冲区数组。
    ByteArrayInputStream(byte[] buf, int offset, int length)
    创建一个ByteArrayInputStream,使用buf作为其缓冲区数组。
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    返回可以从此输入流中读取(或跳过)的剩余字节数。
    void
    close()
    关闭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
    reset()
    将缓冲区重置为标记位置。
    long
    skip(long n)
    从此输入流中跳过n个字节的输入。

    Methods declared in class java.io.InputStream

    nullInputStream, read, readNBytes, skipNBytes, transferTo

    Methods declared in class java.lang.Object

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

    • 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
      输入流缓冲区中最后一个有效字节的索引加一。此值应始终为非负且不大于buf的长度。它比可以从输入流缓冲区中读取的buf内最后一个字节的位置大一。
  • Constructor Details

    • 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 - 从缓冲区中读取的最大字节数。
  • Method Details

    • read

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

      read方法不会阻塞。

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

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

      InputStream重写方法不同,如果已到达流的末尾且len == 0,则此方法返回-1而不是零。

      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字节后可能会发生。因此,如果发生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错误。