У меня есть ByteBuffer, называемый буфер. Я хочу сгенерировать новый буфер, который содержит все его байты, которые идут от buffer.position () до конца буфера , за которым следует все байты от позиции 0 до buffer.position () - 1.
По сути, я хочу сместить байты в текущей позиции в начало буфера, доводя текущее начало до конца.
Для иллюстрации, если это мой ByteBuffer (где P
- текущая позиция, а цифры 0-9
обозначают байтовые позиции):
|0123456789|
P
... тогда я бы хотел сформировать новый ByteBuffer, который выглядит следующим образом:
|3456789012|
P
Вот что я сейчас пытаюсь (и не работает):
ByteBuffer tmpByteBuffer = buffer.slice();
tmpByteBuffer.limit(buffer.capacity());
А вот ошибка (это из LogCat на Android - хотя я не думаю, что проблема связана с 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)
Может кто-нибудь сказать мне, что я делаю не так?
И есть ли лучший способ сделать это?
Спасибо за любую помощь в этом.