Вопрос

У меня есть файл, который я сопоставляю в память с помощью 'fileChannel.map ()'. Однако при чтении строки для выполнения следующего: это кажется немного странным:

1) read a int for the string length
2) allocate a byte[length] object
3) use .get to read length bytes
4) convert the byte[] to a string

Теперь я знаю с моего фона C ++, которые памяти отображаются файлы для памяти, предоставляются пользователю в качестве указателей на память. Итак, есть хороший способ пропустить с помощью байтового массива и просто пройти конвертацию строки с сопоставленной памятью?

Это было полезно?

Решение

Я предлагаю:

MappedByteBuffer mapped = fileChannel.map(mode, position, size);
String s = new String(mapped.array());

Также возможно использовать mapape.ascharbuffer () и нанести символы таким образом.

Другие советы

В конечном итоге нет. Но есть способ получить вид на данные как символы. Посмотрите на bytebuffer.ascharbuffer ().

Внутри метод AsCharbuffer () делает то же самое, что вы предлагаете, но на основе Char-Char.

Там нет строки, желая частной копии данных. Строки неизменны, и если она использовала общий массив, вы можете сломать это. К сожалению, что нет String(CharSequence) или String(ByteBuffer) конструктор.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top