Имея минимальное количество копий, преобразуйте ограниченный по длине 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

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