当前位置:  开发笔记 > 编程语言 > 正文

从ByteBuffer读取UTF-8字符串,其中length是unsigned int

如何解决《从ByteBuffer读取UTF-8字符串,其中length是unsignedint》经验,为你挑选了1个好方法。

我试图通过java.nio.ByteBuffer读取UTF8字符串.大小是一个unsinged int,当然,Java没有.我已经把这个值读成了很长的一段时间,所以我有了价值.

我的下一个问题是我不能用long创建一个字节数组,并且他长期回到int会导致它被签名.

我也尝试在缓冲区上使用limit(),但是再次使用int不长.

我正在做的具体事情是从类文件中读取UTF8字符串,因此缓冲区中只有UTF8字符串.

关于如何从ByteBuffer读取具有潜在长度的unsigned int的UTF8字符串的任何想法.

编辑:

这是一个问题的例子.

SourceDebugExtension_attribute {
       u2 attribute_name_index;
       u4 attribute_length;
       u1 debug_extension[attribute_length];
    }

attribute_name_index
    The value of the attribute_name_index item must be a valid index into the constant_pool table. The constant_pool entry at that index must be a CONSTANT_Utf8_info structure representing the string "SourceDebugExtension".

attribute_length
    The value of the attribute_length item indicates the length of the attribute, excluding the initial six bytes. The value of the attribute_length item is thus the number of bytes in the debug_extension[] item.

debug_extension[]
    The debug_extension array holds a string, which must be in UTF-8 format. There is no terminating zero byte.

    The string in the debug_extension item will be interpreted as extended debugging information. The content of this string has no semantic effect on the Java Virtual Machine.

因此,从技术角度来看,类文件中的字符串可能是完整的u4(无符号,4字节)长度.

如果对UTF8字符串的大小有限制,这些不会成为问题(我不是UTF8专家,所以可能存在这样的限制).

我可以在它上面扯下它,并与现实一致,那就是不会有一个很长的字符串......



1> Alnitak..:

除非你的字节数组超过2GB(Java的最大正值int),否则将long后面的数据转换为有符号数字就不会有问题int.

如果您的字节数组长度需要超过2GB,那么您做错了,尤其是因为这比JVM的默认最大堆大小...

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有