【发布时间】:2020-12-14 01:26:18
【问题描述】:
如何从 Java ByteBuffer 从 ByteBuffer#position() 开始读取以 NUL 结尾的 UTF-8 字符串?
ByteBuffer b = /* 61 62 63 64 00 31 32 34 00 (hex) */;
String s0 = /* read first string */;
String s1 = /* read second string */;
// `s0` will now contain “ABCD” and `s1` will contain “124”.
我已经尝试过使用Charsets.UTF_8.decode(b),但这个函数似乎忽略了当前的ByteBuffer 位置并一直读取到缓冲区结束。
有没有比寻找包含 0 的字节并将缓冲区限制为它(或将带有字符串的部分复制到单独的缓冲区)更惯用的方法从字节缓冲区读取此类字符串?
【问题讨论】:
-
这不是代码编写服务。发表您自己的努力并告诉我们您遇到了什么问题。
-
对于较低级别的功能,我会查看
CharsetDecoder... -
呃,读取字符直到你得到 NUL?不清楚问题出在哪里。
-
您是否尝试过在循环中逐字节读取并填充
byte[],然后实例化new String( bytes[], StandardCharsets.UTF_8 );? -
@Jim,是的,但我认为它不必要地复杂,因为可以(至少在理论上)使用原始缓冲区。
标签: java nio bytebuffer text-decoding