Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 写入/读取字节的数据结构_Java_Java Io - Fatal编程技术网

Java 写入/读取字节的数据结构

Java 写入/读取字节的数据结构,java,java-io,Java,Java Io,我不断遇到这样的情况,我想要一些结构,比如说缓冲区大小4096,我可以 将字节写入 从中读取字节 将读取重置回上一次读取 最重要的是,当数据窗口接近字节数组的末尾时,不必处理复制内容!!!(这很像一个循环缓冲区,基本上是环绕式的) ByteBuffer看起来和byte[]一样令人心痛,当您在这两个字节上写入和读取byte[]时,数组的开头开始清空。我几乎只想要一个列表的结构或其他东西……我只想让它为我管理好(或者我可能需要编写自己的结构)。我认为某种类型的InputStream最好带有标记和重置

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

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


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

    您可能能够使用-使用getAvailable()方法,而不是读取然后重置。

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


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

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

    ByteBuffer
    似乎完全适合这个,而
    ByteBuffer.compact()则是您想要使用的
    是您在将剩余缓冲区移回起始位置时真正想要使用的功能。在两种实现中,性能实际上是并驾齐驱地运行1GByte。在我们的用例中,compact确实以微小的优势获胜。谢谢…如果这是一个答案,我会把它标记为正确答案;)。艾克,GPL,阿帕奇会没事的