gpt4 book ai didi

java - 具有移位字节的新 ByteBuffer(Java)?

转载 作者:行者123 更新时间:2023-11-29 08:16:26 28 4
gpt4 key购买 nike

我有一个名为 buffer 的 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)

关于java - 具有移位字节的新 ByteBuffer(Java)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4507615/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com