在 Java 中,我需要将来自 OutputStream 的内容(我自己将数据填充到该流)放入 ByteBuffer。如何以简单的方式做到这一点?
原文由 Rasto 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Java 中,我需要将来自 OutputStream 的内容(我自己将数据填充到该流)放入 ByteBuffer。如何以简单的方式做到这一点?
原文由 Rasto 发布,翻译遵循 CC BY-SA 4.0 许可协议
@DJClayworth 的答案有一个更有效的变体。
正如@seh 正确注意到的那样, ByteArrayOutputStream.toByteArray()
返回支持对象的 副本 byte[]
对象,这可能效率低下。但是,支持 byte[]
对象以及字节数都是 ByteArrayOutputStream
类的受保护成员。因此,您可以创建自己的 ByteArrayOutputStream 变体,直接公开它们:
public class MyByteArrayOutputStream extends ByteArrayOutputStream {
public MyByteArrayOutputStream() {
}
public MyByteArrayOutputStream(int size) {
super(size);
}
public int getCount() {
return count;
}
public byte[] getBuf() {
return buf;
}
}
使用这个类很简单:
MyByteArrayOutputStream out = new MyByteArrayOutputStream();
fillTheOutputStream(out);
return new ByteArrayInputStream(out.getBuf(), 0, out.getCount());
结果,一旦所有输出都被写入,同一个缓冲区就被用作输入流的基础。
原文由 mark 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.1k 阅读✓ 已解决
您可以创建一个
ByteArrayOutputStream
并写入它,然后使用 --- 将内容提取为byte[]
toByteArray()
。然后ByteBuffer.wrap(byte [])
将创建一个ByteBuffer
输出字节数组的内容。