Положение файлового канала и длина строки - PullRequest
1 голос
/ 01 июня 2011

В Java символы имеют длину 2 байта, но когда я записываю строку в файл с помощью байтового буфера, позиция файлового канала увеличивается на количество символов.Я прочитал, что метод Filechannel.position () возвращает количество байтов от начала файла до текущей позиции, поэтому его приращение должно увеличиться на 2 * число символов?.

Ответы [ 2 ]

1 голос
/ 01 июня 2011

В Java символы имеют длину 2 байта

Внутри JVM. При записи они могут иметь длину 1-4 байта в зависимости от набора символов.

Но когда я пишу строку в файл использование байтового буфера файлового канала приращение позиции на количество символы.

Нет, увеличивается на количество байтов.

Я читал, что Filechannel.position () метод возвращает количество байтов от начала файла до текущая позиция так круто это увеличение на 2 * числа символов?

Нет. Ваш вопрос основан на двух заблуждениях.

0 голосов
/ 01 июня 2011

Не совсем.В Java тип char в два раза больше ширины в битах типа byte, но это означает, что только символы могут иметь длину два байта.Это зависит от кодировки символов вашей String, но с кодировкой UTF-8 (по умолчанию) символы кодируются как только один байт для символов от 0 до 127, но несколько байтов для символов в этом диапазоне (когда установлен старший бит, онозначает, что следующий байт также является частью текущего символа)

Для строк, состоящих только из 0-127 символов (т. е. «обычный текст»), длина байта будет равна длине символа.

Если вашСтрока содержит символы вне диапазона 0-127, длина байта будет больше, чем количество символов.

...