您的位置:

ByteArrayInputStream用法

1、概述

ByteArrayInputStream是一个字节流,它可以把一个byte数组包装成一个输入流。它提供了将一个byte数组的数据读取成一个输入流的功能。我们可以使用ByteArrayInputStream来读取内存中的byte数组并将其转换为InputStream。

2、ByteArrayInputStream的构造函数

1、ByteArrayInputStream(byte[] buf)

创建一个新的ByteArrayInputStream,它使用buf作为其缓冲区数组。The array is not copied. The array is not copied; the reference to the array is kept and later used.

2、ByteArrayInputStream(byte[] buf, int offset, int length)

创建一个新的ByteArrayInputStream,它使用buf作为其缓冲区数组。缓冲区的起始位置是offset,缓冲区的长度是length。The buffer is not copied; the reference to the buffer is kept and later used. The buffer array's mark is set to the specified offset.

3、ByteArrayInputStream的方法

1、close()

关闭此输入流并释放与流相关联的所有资源。一旦流被关闭,试图使用此流读取数据将抛出IOException。

2、available()

返回此输入流当前可以读取(或跳过)的字节数的估计值。

3、mark(int readlimit)

将此流的标记设置在当前的流位置。在标记被设置且未被当前流的方法重置前,调用reset方法可将流重新定位到这一点。

4、markSupported()

测试此输入流是否支持mark和reset方法。

5、read()

从此输入流中读取下一个数据字节,并返回一个byte值,范围从0到255。如果由于已达到流末尾而没有可用的字节,则返回值为-1。

6、read(byte[] b)

从此输入流中将最多b.length个字节的数据读入一个byte数组中。试图读取多于b.length个字节的数据将导致抛出IOException。此方法将阻塞直到一个字节可用,或者流的末尾被检测到。如果流已经结束,返回值为-1。

7、read(byte[] b, int off, int len)

从此输入流中将最多len个字节的数据读入一个byte数组中。试图读取多于len个字节的数据将导致抛出IOException。此方法将阻塞直到一个字节可用,或者流的末尾被检测到。如果流已经结束,返回值为-1。

8、reset()

将此流重新定位到上次对此输入流调用mark方法时的位置。

9、skip(long n)

跳过并丢弃此输入流中的n个字节,而不使其读取到任何字节。

4、示例代码

public static void main(String[] args) throws IOException {
    String str = "Hello World!";
    byte[] byteArray = str.getBytes();

    ByteArrayInputStream inputStream = new ByteArrayInputStream(byteArray);

    int data = inputStream.read();
    while(data != -1){
        char output = (char) data;
        System.out.print(output);

        data = inputStream.read();
    }

    inputStream.close();
}

5、总结

通过ByteArrayInputStream,我们可以方便地将一个byte数组中的数据读取为InputStream。此外,ByteArrayInputStream还提供了一些方便的方法,比如mark、reset和skip等。在读取内存中的byte数组时,使用ByteArrayInputStream是非常方便和高效的选择。