Новое Распределяем каналы MAX по категориям и территориям. Читать новость

Проверяем UTF-8 импорт!



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

Сразу задаём правило для повреждённых байтов:

var decoder = StandardCharsets.UTF_8.newDecoder()
.onMalformedInput(CodingErrorAction.REPORT)
.onUnmappableCharacter(CodingErrorAction.REPORT);

REPO{}
RT заставляет чтение завершиться ошибкой при неверном UTF-8 вместо подстановки символа. Это важно для импорта идентификаторов, контрольных данных и файлов.

Оборачиваем байтовый поток в символьный и читаем строки последовательно:
try (v
ar reader = new BufferedReader(new InputStreamReader(
Files.newInputStream(path), decoder))) {
for (String line; (line = reader.readLine()) != null; ) importLine(line);
}

InputStreamRea{}
der сохраняет состояние между чтениями, поэтому многобайтовый символ корректно собирается даже на границе внутренних буферов. try-with-resources закрывает файл при завершении и при исключении.

Повреждённый ввод отделяем от ошибок бизнес-обработки:
try {
readImpor
t(path);
} catch (CharacterCodingException error) {
reportInvalidEncoding(path);
}

Так импорт сохраняет{}
строгую проверку кодировки и расходует память пропорционально буферу и одной строке, а не всему файлу.

👉 Java Ready | практика
Просмотры: 359
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти