当ByteBuffer.put(ByteBuffer)方法存在时,ByteBuffer.get(ByteBuffer)似乎缺失了吗?如何从较大的ByteBuffer中读取较小的ByteBuffer?
发布于 2014-02-18 15:49:52
存在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() )。但是无论如何,您要做的是而不是,您必须将缓冲区内容复制到一个新的字节数组中,才能将其传输到另一个缓冲区中!
发布于 2014-02-18 15:24:24
考虑阅读ByteBuffer的API页面。
ByteBuffer get(byte[])
和
ByteBuffer get(byte[] dst, int offset, int length)
发布于 2014-02-18 15:25:46
如果我正确理解,您只需要重新包装byte[]在一个新的ByteBuffer。
ByteByffer buffer = ...;
byte[] sub = new byte[someSize];
buffer.get(sub [, ..]); // use appropriate get(..) method
buffer = ByteBuffer.wrap(sub);https://stackoverflow.com/questions/21857854
复制相似问题