java.nio.ByteBuffer を介して UTF8 文字列を読み込もうとしています。サイズは unsinged int であり、もちろん Java にはありません。値を取得できるように、値を long に読み込みました。
私が抱えている次の問題は、long を使用してバイト配列を作成できないことです。long を int にキャストすると、署名されます。
また、バッファで limit() を使用してみましたが、これも int not long で動作します。
私が行っている特定のことは、クラスファイルから 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 の専門家ではないので、おそらくそのような制限があるでしょう)。
私はただそれをパントして、それほど長いストリングが存在しないという現実を受け入れることができました...