首页 文章

带有移位字节的新ByteBuffer(Java)?

提问于
浏览
1

我有一个叫做缓冲区的ByteBuffer . 我想生成一个新的缓冲区,其中包含从buffer.position()到缓冲区末尾的所有字节,后跟从位置0到buffer.position() - 1的所有字节 .

本质上,我想将当前位置的字节移动到缓冲区的开头,同时将当前开始结束 .

为了说明,如果这是我的ByteBuffer(其中 P 是当前位置,数字 0-9 表示字节位置):

|0123456789|
     P

...然后我想要形成一个新的ByteBuffer,看起来像这样:

|3456789012|
  P

这是我到目前为止所尝试的(并且不起作用):

ByteBuffer tmpByteBuffer = buffer.slice();

 tmpByteBuffer.limit(buffer.capacity());

这是错误(这是来自Android上的LogCat - 虽然我不认为该问题是特定于Android的):

12-22 03:49:44.303: ERROR/AndroidRuntime(10399): Uncaught handler: thread Thread-11 exiting due to uncaught exception
 12-22 03:49:44.313: ERROR/AndroidRuntime(10399): java.lang.IllegalArgumentException
 12-22 03:49:44.313: ERROR/AndroidRuntime(10399):     at java.nio.Buffer.limit(Buffer.java:239)
 12-22 03:49:44.313: ERROR/AndroidRuntime(10399):     at com.chaimp.audiolistener.AudioListener.captureSamples(AudioListener.java:175)
 12-22 03:49:44.313: ERROR/AndroidRuntime(10399):     at com.chaimp.precisiontuner.PrecisionTuner$1.run(PrecisionTuner.java:28)
 12-22 03:49:44.313: ERROR/AndroidRuntime(10399):     at java.lang.Thread.run(Thread.java:1096)

谁能告诉我我做错了什么?

而且,有更好的方法吗?

感谢您对此的任何帮助 .

1 回答

  • 5

    嗯,我不明白你为什么需要对切片缓冲区设置限制 . 这应该工作:

    ByteBuffer originalBuffer = getOriginalBuffer();
    ByteBuffer newBuffer = ByteBuffer.allocate(originalBuffer.limit());
    
    ByteBuffer slicedBuffer = originalBuffer.slice(); //Will be from pos to end
    originalBuffer.flip(); //Will be from 0 to pos
    
    newBuffer.put(slicedBuffer)
    newBuffer.put(originalBuffer)
    

相关问题