在Java中,我怎样将InputStream转换成字节数组(byte[])?

21

我的背景是 .net,对于 Java 还比较新。我正在为公司的 Java 团队做一些工作,架构师需要我实现一个接受 InputStream(java.io)对象的方法。为了完成该方法的目的,我需要将其转换为字节数组。有没有一种简单的方法来实现这个转换?


请注意,这可能会占用大量内存。 - BalusC
2个回答

62

最简单的方法是创建一个新的ByteArrayOutputStream,将字节复制到其中,然后调用toByteArray

public static byte[] readFully(InputStream input) throws IOException
{
    byte[] buffer = new byte[8192];
    int bytesRead;
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    while ((bytesRead = input.read(buffer)) != -1)
    {
        output.write(buffer, 0, bytesRead);
    }
    return output.toByteArray();
}

在返回之前,请确保刷新输出流。 - quikchange
5
当您使用ByteArrayOutputStream时,无需缓冲 - 它会将数据直接写入内存中的字节数组,因此不需要指定缓冲区。 - Jon Skeet

9

一个简单的方法是使用org.apache.commons.io.IOUtils.toByteArray( inputStream ),请参阅apache commons io


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接