如何将字节数组转换为字节输出流(ByteArrayOutputStream)

35

我需要将一个字节数组转换为ByteArrayOutputStream,这样我就可以在屏幕上显示它。


5
你确定你不是想用 ByteArrayInputStream 而不是 ByteArrayOutputStreamByteArrayOutputStream 是用来接收数据的。 - Jon Skeet
使用JDK/11,现在可以直接使用提供的实用程序编写完整的字节数组 - Naman
3个回答

62
byte[] bytes = ....;
ByteArrayOutputStream baos = new ByteArrayOutputStream(bytes.length);
baos.write(bytes, 0, bytes.length);

方法描述:

将从指定的字节数组中,从偏移量 off 开始的 len 个字节写入此字节数组输出流。


将从指定的字节数组中,从偏移量 off 开始的 len 个字节写入此字节数组输出流。


0

使用 JDK/11,您可以使用 writeBytes(byte b[]) API,该API最终调用建议中的write(b, 0, b.length),参见Josh的答案

/**
 * Writes the complete contents of the specified byte array
 * to this {@code ByteArrayOutputStream}.
 *
 * @apiNote
 * This method is equivalent to {@link #write(byte[],int,int)
 * write(b, 0, b.length)}.
 *
 * @param   b     the data.
 * @throws  NullPointerException if {@code b} is {@code null}.
 * @since   11
 */
public void writeBytes(byte b[]) {
    write(b, 0, b.length);
}

示例代码将简单转换为--

byte[] bytes = new byte[100];
ByteArrayOutputStream baos = new ByteArrayOutputStream(bytes.length);
baos.writeBytes(bytes);

1
writeBytes(byte[])write(byte[])有什么区别? - osvein
1
它继承自OutputStream。 - osvein

0
你不能直接显示一个 ByteArrayOutputStream。我猜测你想做的是
byte[] bytes = ...
String text = new String(bytes, "UTF-8"); // or some other encoding.
// display text.

你可以让 ByteArrayOutputStream 做类似的事情,但这不是显而易见的、高效的或最佳实践(因为你不能控制所使用的编码)


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