[英]How can I read a smaller ByteBuffer from a larger ByteBuffer?
虽然存在ByteBuffer.put(ByteBuffer)
方法,但ByteBuffer.get(ByteBuffer)
似乎丢失了? 我怎么实现读取一个较小ByteBuffer
从更大ByteBuffer
?
存在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()
)。 但在任何情况下,你不必缓冲区的内容复制到一个新的字节数组只是把它转移到另一个缓冲区!
如果我理解正确,你只需要在新的ByteBuffer
重新包装byte[]
。
ByteByffer buffer = ...;
byte[] sub = new byte[someSize];
buffer.get(sub [, ..]); // use appropriate get(..) method
buffer = ByteBuffer.wrap(sub);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.