【问题标题】:How to append one ByteBuffer to other?如何将一个 ByteBuffer 附加到另一个?
【发布时间】:2012-06-06 05:18:44
【问题描述】:

假设我有 2 个 ByteBuffer,其中包含一些字节... 将一个 ByteBuffer 的所有内容与另一个附加的最佳方法是什么? 我正在这样做,但它会引发 BufferUnderFlowException:

ByteBuffer allData = ByteBuffer.allocate(999999);
ByteBuffer buff = null;
for (int i = 0; i < n; i++) {
    buff = aMethodThatReturnsAFilledByteBuffer();
    allData.put(buff);
}

我做错了什么? 提前致谢。

【问题讨论】:

标签: java java-io bytebuffer


【解决方案1】:

这里是如何工作的:

ByteBuffer.allocate(byteBuffer.limit() + byteBuffer2.limit())
          .put(byteBuffer)
          .put(byteBuffer2)
          .rewind()

在这里使用 bytebuffer limit(),因为这是 byteBuffers 被填充到的地方。使用 capacity() 也应该有效,但可以分配比您严格需要的更多的字节。

关于限制和容量,我查看了这篇帖子:What is the difference between limit and capacity in ByteBuffer?

【讨论】:

    【解决方案2】:

    在任何暗示get() 操作的操作(例如write())之前,您需要flip() 源缓冲区,或者将其用作put() 操作的源到另一个缓冲区。之后您还需要compact() 以恢复其状态。

    【讨论】:

      猜你喜欢
      • 2014-03-04
      • 2020-04-25
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      • 1970-01-01
      相关资源
      最近更新 更多