Имея минимальное количество копий, преобразуйте ограниченный по длине UTF-8 MemorySegment в java.lang.foreign.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Имея минимальное количество копий, преобразуйте ограниченный по длине UTF-8 MemorySegment в java.lang.foreign.

Сообщение Anonymous »

Предположим, у меня есть последовательность байтов, поступающая из C или какой-либо другой собственной платформы, выраженная в JVM как java.lang.foreign.MemorySegment и длина int (или любая другая). Эта последовательность байтов не заканчивается нулем.
Как я могу преобразовать ее в java.lang.String с минимальным копированием?
В частности, документация Javadoc для MemorySegment.getString(long, Charset) предлагает создать новый байт[], скопировать MemorySegment в этот байт[] и преобразовать этот байт[] в строку:

Код: Выделить всё

    byte[] bytes = new byte[length];
MemorySegment.copy(segment, JAVA_BYTE, offset, bytes, 0, length);
return new String(bytes, charset);
Учитывая, что Oracle хвастается эффективностью FFM при преобразовании строк, я бы надеялся, что найдется способ избежать этого копирования, но, возможно, я ошибаюсь.
(Предположим, что я знаком с изречением Кнута об оптимизации и знаю, что оптимизация того стоит.)

Подробнее здесь: https://stackoverflow.com/questions/796 ... n-java-lan
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»