我需要写入 ByteBuffer 的对象被键入为接口(interface) DataOutput 的实例,而不是类 DataOutputStream(实现 DataOutput)的实例。我需要假设 ByteBuffer.hasArray() 可以返回 false,因此我无权访问任何底层数组。
DataOutput 和 DataOutputStream 都不提供接受 ByteBuffer 的写入方法。然而,将 ByteBuffer 写入 DataOutputStream 可以使用 WritableByteChannel 来完成,WritableByteChannel 是通过将 OutputStream 传递给 Channels 类的实用程序方法来获得的。但 DataOutput 与 OutputStream 类型不兼容,并且不存在类似的实用方法。
SDK 是否提供了任何有效的例程来执行此操作?我宁愿不必创建中间字节数组并使用批量获取操作循环遍历 ByteBuffer(有效地复制 WritableByteChannel 实现的代码)。
最佳答案
我不认为这有什么简单的说法。一个简单的 while 循环就足够了:
DataOutput out = ...
ByteBuffer bb = ...
while (bb.hasRemaining()) {
out.writeByte(bb.get());
}
关于java - 将 ByteBuffer 的内容写入 DataOutput?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50291543/