2

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

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

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

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

4

3 回答 3

2

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

于 2013-04-10T19:03:21.610 回答
0

您也许可以使用这个循环字节缓冲区- 使用 getAvailable() 方法而不是读取然后重置。

于 2013-04-09T15:59:34.843 回答
0

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

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

有人用这个吗?我没问题。

于 2013-04-09T16:07:02.243 回答