虽然存在ByteBuffer.put(ByteBuffer)
方法,但似乎缺少ByteBuffer.get(ByteBuffer)
?我应该如何从较大的ByteBuffer
中读取较小的ByteBuffer
?
答案 0 :(得分:1)
ByteBuffer get(byte[])
和
ByteBuffer get(byte[] dst, int offset, int length)
答案 1 :(得分:1)
存在ByteBuffer#put
方法:
public ByteBuffer put(ByteBuffer src):此方法将给定源缓冲区中剩余的字节传输到此缓冲区
您正在寻找类似
的内容public ByteBuffer get(ByteBuffer dst):此方法将此缓冲区中剩余的字节传输到给定的目标缓冲区
但请注意,操作get
和put
有点对称。
ByteBuffer src = ...
ByteBuffer dst = ...
//src.get(dst); // Does not exist
dst.put(src); // Use this instead
您明确谈到了较小的和较大的缓冲区。所以我假设dst
缓冲区小于src
缓冲区。在这种情况下,您可以相应地设置源缓冲区的限制:
ByteBuffer src = ...
ByteBuffer dst = ...
int oldLimit = src.limit();
src.limit(src.position()+dst.remaining());
dst.put(src);
src.limit(oldLimit);
替代配方是可能的(例如使用原始缓冲区的ByteBuffer#slice()
)。但无论如何,不必须将缓冲区内容复制到新的字节数组中,只是为了将其传输到另一个缓冲区中!
答案 2 :(得分:0)
如果我理解正确,您只需要将byte[]
重新包装到新的ByteBuffer
中。
ByteByffer buffer = ...;
byte[] sub = new byte[someSize];
buffer.get(sub [, ..]); // use appropriate get(..) method
buffer = ByteBuffer.wrap(sub);