如何复制 ByteBuffer 的内容?
How to copy the contents of ByteBuffer?
我从 MediaCodec 接收到 ByteBuffer 对象,目的是将 ByteBuffer 的内容复制到我的 ByteBuffer 对象,从而缩小容量。像这样:
// get the ByteBuffer from MediaCodec
// the capacity of encodedBufferFromMediaCodec is 12345678
encodedBufferFromMediaCodec = getByteBuffer();
// copy the content of encodedBufferFromMediaCodec to my ByteBuffer
// the capacity of myBuffer is 123456
// the content'size of encodedBufferFromMediaCodec is 123
myBuffer.put(encodedBufferFromMediaCodec);
以上是我的目标。但是我遇到了以下异常:
10-30 14:48:54.621 E/AndroidRuntime( 2999): Process: com.jerikc.demo, PID: 2999
10-30 14:48:54.621 E/AndroidRuntime( 2999): java.nio.BufferOverflowException
10-30 14:48:54.621 E/AndroidRuntime( 2999): at java.nio.ByteBuffer.put(ByteBuffer.java:753)
那么怎么做呢?
ByteBuffer myBuffer = ByteBuffer.allocate(123456);
encodedBufferFromMediaCodec.rewind();
int i = 0;
while (i < 123456) {
myBuffer.put(encodedBufferFromMediaCodec.get());
i++;
}
myBuffer.flip();
请注意,如果 encodedBuffer 包含 123456+ 处的数据,您将丢失该数据。
- 翻转源缓冲区。
- 将源缓冲区放入目标缓冲区。
- 压缩源缓冲区。
正如 EJP 所建议的,这应该涵盖大多数情况。如果 encodedBufferFromMediaCodec
超过 12345 字节,它将不起作用。在这种情况下,您将得到一个 BufferOverflowException。
ByteBuffer myBuffer = ByteBuffer.allocate(12345);
ByteBuffer encodedBufferFromMediaCodec = getByteBuffer();
encodedBufferFromMediaCodec.flip();
myBuffer.put(encodedBufferFromMediaCodec);
encodedBufferFromMediaCodec.compact();
我从 MediaCodec 接收到 ByteBuffer 对象,目的是将 ByteBuffer 的内容复制到我的 ByteBuffer 对象,从而缩小容量。像这样:
// get the ByteBuffer from MediaCodec
// the capacity of encodedBufferFromMediaCodec is 12345678
encodedBufferFromMediaCodec = getByteBuffer();
// copy the content of encodedBufferFromMediaCodec to my ByteBuffer
// the capacity of myBuffer is 123456
// the content'size of encodedBufferFromMediaCodec is 123
myBuffer.put(encodedBufferFromMediaCodec);
以上是我的目标。但是我遇到了以下异常:
10-30 14:48:54.621 E/AndroidRuntime( 2999): Process: com.jerikc.demo, PID: 2999
10-30 14:48:54.621 E/AndroidRuntime( 2999): java.nio.BufferOverflowException
10-30 14:48:54.621 E/AndroidRuntime( 2999): at java.nio.ByteBuffer.put(ByteBuffer.java:753)
那么怎么做呢?
ByteBuffer myBuffer = ByteBuffer.allocate(123456);
encodedBufferFromMediaCodec.rewind();
int i = 0;
while (i < 123456) {
myBuffer.put(encodedBufferFromMediaCodec.get());
i++;
}
myBuffer.flip();
请注意,如果 encodedBuffer 包含 123456+ 处的数据,您将丢失该数据。
- 翻转源缓冲区。
- 将源缓冲区放入目标缓冲区。
- 压缩源缓冲区。
正如 EJP 所建议的,这应该涵盖大多数情况。如果 encodedBufferFromMediaCodec
超过 12345 字节,它将不起作用。在这种情况下,您将得到一个 BufferOverflowException。
ByteBuffer myBuffer = ByteBuffer.allocate(12345);
ByteBuffer encodedBufferFromMediaCodec = getByteBuffer();
encodedBufferFromMediaCodec.flip();
myBuffer.put(encodedBufferFromMediaCodec);
encodedBufferFromMediaCodec.compact();