【问题标题】:Data structure for write/read bytes写/读字节的数据结构
【发布时间】:2013-04-01 03:54:41
【问题描述】:

我一直遇到我想要一些结构的情况,比如说缓冲区大小为 4096,我可以

  1. 将字节写入
  2. 从中读取字节
  3. 将读取重置为上一次读取
  4. 最重要的是,当数据窗口接近字节数组的末尾时,不必处理复制内容!!! (这很像一个循环缓冲区,基本上带有环绕或其他东西)

ByteBuffer 似乎和 byte[] 一样令人心痛,因为你在这两个上写入和读取它,数组的开头开始清空。我几乎只想要一个 List 或其他东西的结构......我只想为我管理它(或者我可能必须编写自己的结构)。我认为带有标记和重置的某种 InputStream 会很好,因此我可以在读取之前进行标记,然后在缓冲区中没有足够数据的情况下重置。

这在几乎所有异步编程中都非常有用,其中数据进入并且您可能有足够的解析或可能没有足够的解析并且您填充缓冲区,尝试读取和解析并且需要重置直到您有更多数据.

【问题讨论】:

  • 性能是并驾齐驱的,实际上通过这两种实现运行 1GByte。在我们的用例中,compact 确实以微弱优势获胜。谢谢...如果这是一个答案,我会将其标记为正确答案;)。

标签: java java-io


【解决方案1】:

您也许可以使用this circular byte buffer - 使用 getAvailable() 方法而不是读取然后重置。

【讨论】:

  • ick、GPL、apache 都可以
【解决方案2】:

嗯,我刚刚找到了这个非 GPL 的...apache 许可证看起来像..

https://svn.apache.org/repos/asf/etch/releases/release-1.0.0/util/src/main/java/etch/util/CircularByteBuffer.java

有人用吗?我没问题。

【讨论】:

    【解决方案3】:

    ByteBuffer 似乎完全适合这一点,而ByteBuffer.compact() 确实是您想要将剩余缓冲区移回开始时想要使用的。

    【讨论】:

      猜你喜欢
      • 2016-06-28
      • 2010-09-05
      • 1970-01-01
      • 2012-03-19
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      相关资源
      最近更新 更多