我有一个称为缓冲区的 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)
谁能告诉我我做错了什么?
而且,有没有更好的方法来做到这一点?
感谢您对此的任何帮助。