写/读字节的数据结构

时间:2013-04-09 15:53:00

标签: java java-io

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

  1. 将字节写入
  2. 从中读取字节
  3. 将读回重置为上一次读取
  4. 最重要的是,当数据窗口接近字节数组的末尾时,不必处理复制内容! (这很像一个循环缓冲区,基本上有环绕或其他东西)
  5. ByteBuffer看起来和byte []一样令人心痛,就像你写它并从中读取它们一样,数组的开头开始清空。我几乎只想要一个List或者其他东西的结构......我只是希望它为我管理(或者我可能必须编写自己的结构)。我认为某种类型的InputStream可以很好地使用标记和重置,所以我可以在读取之前进行标记,然后在缓冲区中没有足够数据的情况下进行重置。

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

3 个答案:

答案 0 :(得分:2)

ByteBuffer似乎完全正确,当您想要将剩余缓冲区移回到开头时,ByteBuffer.compact()就是您想要使用的。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

嗯,我刚刚发现这个非GPL一个... apache许可证看起来像..

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

有谁用过这个? lloks好我。