首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从较大的ByteBuffer中读取较小的ByteBuffer?

如何从较大的ByteBuffer中读取较小的ByteBuffer?
EN

Stack Overflow用户
提问于 2014-02-18 15:14:27
回答 3查看 2.5K关注 0票数 0

ByteBuffer.put(ByteBuffer)方法存在时,ByteBuffer.get(ByteBuffer)似乎缺失了吗?如何从较大的ByteBuffer中读取较小的ByteBuffer

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-18 15:49:52

存在ByteBuffer#put方法:

public ByteBuffer put(ByteBuffer src):该方法将给定源缓冲区中剩余的字节转移到此缓冲区

你在找类似的东西

public ByteBuffer get(ByteBuffer dst):该方法将此缓冲区中剩余的字节转移到给定的目标缓冲区

但是请考虑getput操作是对称的。

代码语言:javascript
复制
ByteBuffer src = ...
ByteBuffer dst = ...
//src.get(dst); // Does not exist
dst.put(src); // Use this instead

您明确地谈到了越来越小的缓冲区。因此,我假设dst缓冲区比src缓冲区小。在这种情况下,只需相应地设置源缓冲区的限制:

代码语言:javascript
复制
ByteBuffer src = ...
ByteBuffer dst = ...
int oldLimit = src.limit();
src.limit(src.position()+dst.remaining());
dst.put(src);
src.limit(oldLimit);

替代配方是可能的(例如使用原始缓冲器的ByteBuffer#slice() )。但是无论如何,您要做的是而不是,您必须将缓冲区内容复制到一个新的字节数组中,才能将其传输到另一个缓冲区中!

票数 1
EN

Stack Overflow用户

发布于 2014-02-18 15:24:24

考虑阅读ByteBuffer的API页面

ByteBuffer get(byte[])

ByteBuffer get(byte[] dst, int offset, int length)

票数 1
EN

Stack Overflow用户

发布于 2014-02-18 15:25:46

如果我正确理解,您只需要重新包装byte[]在一个新的ByteBuffer

代码语言:javascript
复制
ByteByffer buffer = ...;
byte[] sub = new byte[someSize];
buffer.get(sub [, ..]); // use appropriate get(..) method
buffer = ByteBuffer.wrap(sub);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21857854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档