Я пытаюсь прочитать строку UTF8 через java.nio.ByteBuffer. Размер - это неизменный тип int, которого, конечно, в Java нет. Я прочитал значение в long, так что у меня есть значение.
Следующая проблема, с которой я столкнулся, заключается в том, что я не могу создать массив байтов с long, и приведение его long к int приведет к его подписанию.
Я также пытался использовать limit () в буфере, но опять-таки он работает с int не долго.
Конкретная вещь, которую я делаю, - это чтение строк UTF8 из файла класса, поэтому в буфере содержится больше, чем просто строка UTF8.
Любые идеи о том, как прочитать строку UTF8, которая имеет потенциальную длину беззнакового целого числа из ByteBuffer.
РЕДАКТИРОВАТЬ:
Вот пример вопроса .
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, так что, возможно, такое ограничение существует).
Я мог бы просто надуть это и пойти с реальностью, что не будет такой длинной строки ...