首页 > 解决方案 > 将 ByteBuffer 的内容写入 DataOutput?

问题描述

我需要写入 ByteBuffer 的对象被键入为接口DataOutput的实例,而不是作为DataOutputStream类(实现 DataOutput)的实例。我需要假设 ByteBuffer.hasArray() 可以返回 false,所以我无权访问任何底层数组。

DataOutput 和 DataOutputStream 都没有提供接受 ByteBuffer 的写入方法。但是,可以使用 WritableByteChannel 将 ByteBuffer 写入 DataOutputStream,通过将 OutputStream 传递给 Channels 类的实用方法获得。但是 DataOutput 与 OutputStream 的类型不兼容,并且不存在类似的实用方法。

SDK 是否提供任何有效的例程来执行此操作?我宁愿不必创建一个中间字节数组并通过批量获取操作循环通过 ByteBuffer(有效地复制 WritableByteChannel 实现的代码)。

标签: javabytebufferdataoutputstream

解决方案


我不相信有一个单一的衬里。一个简单的while循环就足够了:

DataOutput out = ...
ByteBuffer bb = ...
while (bb.hasRemaining()) {
  out.writeByte(bb.get());
}

推荐阅读