Java 将InputStream转换为Byte数组的方法

Java 将InputStream转换为Byte数组的方法

Java 将InputStream转换为Byte数组的方法

在Java开发过程中,我们经常需要处理各种输入输出流。其中,将InputStream对象转换为Byte数组是一个常见的操作。本文将详细介绍几种实现这种转换的方法。

方法一:使用ByteArrayOutputStream字节数组输出流

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class InputStreamToByteArrayMethod1 {

    public static byte[] inputStreamToByteArray(InputStream inputStream) throws IOException {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int length;
        while ((length = inputStream.read(buffer)) != -1) {
            byteArrayOutputStream.write(buffer, 0, length);
        }
        byteArrayOutputStream.close();
        return byteArrayOutputStream.toByteArray();
    }

    public static void main(String[] args) {
        InputStream inputStream = InputStreamToByteArrayMethod1.class.getResourceAsStream("example.txt");
        try {
            byte[] byteArray = inputStreamToByteArray(inputStream);
            System.out.println(new String(byteArray));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行结果:

This is an example file.

使用ByteArrayOutputStream字节数组输出流的方法比较简单。我们创建一个ByteArrayOutputStream对象,并使用一个缓冲区读取输入流。每次读取时,将数据写入字节数组输出流。最后,通过调用toByteArray()方法,将ByteArrayOutputStream对象转换为字节数组。

方法二:使用Apache Commons IO库

除了自己实现字节数组输出流的方法,我们还可以使用Apache Commons IO库中提供的工具类快速完成这个任务。

首先,我们需要将以下依赖项添加到我们的项目中:

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

然后,我们可以使用IOUtils类中的toByteArray()方法将InputStream转换为字节数组。

import org.apache.commons.io.IOUtils;

import java.io.IOException;
import java.io.InputStream;

public class InputStreamToByteArrayMethod2 {

    public static byte[] inputStreamToByteArray(InputStream inputStream) throws IOException {
        return IOUtils.toByteArray(inputStream);
    }

    public static void main(String[] args) {
        InputStream inputStream = InputStreamToByteArrayMethod2.class.getResourceAsStream("example.txt");
        try {
            byte[] byteArray = inputStreamToByteArray(inputStream);
            System.out.println(new String(byteArray));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行结果:

This is an example file.

方法二使用了Apache Commons IO库中的toByteArray()方法,该方法使用了和方法一相同的原理。但是,使用这种方法可以减少我们自己编写代码的工作量。

方法三:使用Java NIO

Java NIO(New IO)是在Java 1.4版本中引入的一组新的输入输出API。它提供了更快速和更灵活的I/O操作。在Java NIO中,我们可以使用ByteBuffer类和Channels类进行InputStream到Byte数组的转换。

import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;

public class InputStreamToByteArrayMethod3 {

    public static byte[] inputStreamToByteArray(InputStream inputStream) throws IOException {
        ReadableByteChannel channel = Channels.newChannel(inputStream);
        ByteBuffer buffer = ByteBuffer.allocate(1024);
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        while (channel.read(buffer) != -1) {
            buffer.flip();
            while (buffer.hasRemaining()) {
                byteArrayOutputStream.write(buffer.get());
            }
            buffer.clear();
        }
        channel.close();
        byteArrayOutputStream.close();
        return byteArrayOutputStream.toByteArray();
    }

    public static void main(String[] args) {
        InputStream inputStream = InputStreamToByteArrayMethod3.class.getResourceAsStream("example.txt");
        try {
            byte[] byteArray = inputStreamToByteArray(inputStream);
            System.out.println(new String(byteArray));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行结果:

This is an example file.

方法三使用了Java NIO的一些特性,通过Channels类创建一个ReadableByteChannel对象,然后将输入流传递给该通道。接着,我们创建一个ByteBuffer对象和一个字节数组输出流,循环读取通道中的数据并将其写入字节数组输出流。最后,关闭通道和字节数组输出流,并通过调用toByteArray()方法,将字节数组输出流转换为字节数组。

总结

本文介绍了几种将InputStream转换为Byte数组的方法。使用ByteArrayOutputStream字节数组输出流的方法是最简单的,但也可以使用Apache Commons IO库提供的工具类和Java NIO实现类似的功能。根据实际需求和项目特点,我们可以选择适合的方法来完成这个任务。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程