[英]New ByteBuffer with Shifted Bytes (Java)?
我有一个称为缓冲区的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)
有人可以告诉我我在做什么错吗?
而且,还有更好的方法吗?
感谢您对此的任何帮助。
嗯,我不明白为什么您需要为切片缓冲区设置一个限制。 这应该工作:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.