java - 将 ByteBuffer 的内容写入 DataOutput?

标签 java bytebuffer dataoutputstream

我需要写入 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/

相关文章:

java - 使用 FSDataOutputStream 从 Java REST-API 写入 HadoopDFS 的不需要的字符

java - 在 Ruby 中创建类似字节缓冲区的对象

java - 如何全局设置我的 JEE REST 客户端 header ?

java - 我可以在没有 fragment 的情况下执行条件导航吗?

java - 为什么我会收到 ConcurrentModificationException?

c++ - std::string 与字节缓冲区(c++ 中的区别)

Java:直接 IntBuffer 的大小限制?

java - DataOutputStream 和 printwriter 有什么区别?

java - 关于 DataOutputStream 的困惑

java - 你如何在Java中顺序播放音频文件?