Module  java.base
软件包  java.io

Class ByteArrayInputStream

  • All Implemented Interfaces:
    CloseableAutoCloseable


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

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

    从以下版本开始:
    1.0
    另请参见:
    StringBufferInputStream
    • Field Summary

      Fields  
      Modifier and Type Field 描述
      protected byte[] buf
      由数据流的创建者提供的字节数组。
      protected int count
      索引一大于输入流缓冲区中的最后一个有效字符。
      protected int mark
      流中当前标记的位置。
      protected int pos
      从输入流缓冲区读取的下一个字符的索引。
    • 构造方法摘要

      构造方法  
      Constructor 描述
      ByteArrayInputStream​(byte[] buf)
      创建一个 ByteArrayInputStream ,使其使用 buf作为其缓冲区数组。
      ByteArrayInputStream​(byte[] buf, int offset, int length)
      创建 ByteArrayInputStream使用 buf作为其缓冲器阵列。
    • 字段详细信息

      • 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中可以从输入流缓冲区读取的最后一个字节的位置。
    • 构造方法详细信息

      • ByteArrayInputStream

        public ByteArrayInputStream​(byte[] buf)
        创建一个ByteArrayInputStream ,使其使用buf作为其缓冲区数组。 缓冲区数组不被复制。 的初始值pos0和的初始值count是长度buf
        参数
        buf - 输入缓冲区。
      • ByteArrayInputStream

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

      • read

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

        这个read方法不能阻止。

        Specified by:
        readInputStream
        结果
        数据的下一个字节,如果已经达到流的末尾, -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

        这个read方法不能阻止。

        重写:
        readInputStream
        参数
        b - 读取数据的缓冲区。
        off - 目标阵列 b的起始偏移量
        len - 读取的最大字节数。
        结果
        读取到缓冲区的总字节数,如果没有更多的数据,因为已经到达流的末尾,那么这个字节是 -1
        异常
        NullPointerException - 如果 bnull
        IndexOutOfBoundsException - 如果 off为负, len为负数,或 lenb.length - off
        另请参见:
        InputStream.read()
      • skip

        public long skip​(long n)
        从此输入流跳过n个字节的输入。 如果达到输入流的结尾,则可能会跳过更少的字节。 要跳过的字节的实数为k等于ncount-pos的较小者。 k被添加到pos并返回k
        重写:
        skipInputStream
        参数
        n - 要跳过的字节数。
        结果
        实际跳过的字节数。
      • available

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

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

        重写:
        availableInputStream
        结果
        可以从该输入流中读取(或跳过)而不阻塞的剩余字节数。
      • markSupported

        public boolean markSupported​()
        测试InputStream支持标记/复位。 markSupported方法ByteArrayInputStream总是返回true
        重写:
        markSupported InputStream
        结果
        true如果这个流实例支持标记和重置方法; 否则为false
        从以下版本开始:
        1.1
        另请参见:
        InputStream.mark(int)InputStream.reset()
      • mark

        public void mark​(int readAheadLimit)
        设置流中当前标记的位置。 当构造时,ByteArrayInputStream对象在默认情况下标记为零。 它们可以通过此方法标记在缓冲区内的另一个位置。

        如果没有设置标记,则标记的值是传递给构造函数的偏移量(如果没有提供偏移量,则为0)。

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

        重写:
        markInputStream
        参数
        readAheadLimit - 标记位置无效之前可以读取的最大字节数限制。
        从以下版本开始:
        1.1
        另请参见:
        InputStream.reset()
      • reset

        public void reset​()
        将缓冲区重置为标记位置。 标记位置为0,除非在构造函数中指定了另一个位置或者指定了一个偏移量。
        重写:
        resetInputStream
        另请参见:
        InputStream.mark(int)IOException