Выбор ответа Middle Потоки и буферы обновлено
Склейка текста из чанков
Вопрос
Что не так в этом коде чтения UTF-8 файла?
let text = '';
stream.on('data', (chunk) => { text += chunk; });
stream.on('end', () => console.log(text));
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Многобайтовый символ может разорваться между чанками. text += chunk превращает каждый буфер в строку отдельно.
Варианты ответа
- Многобайтовый символ может разорваться между чанкамиправильный ответ
- Ничего, это эталонный способ чтения файла целиком
- Событие
endне срабатывает без вызоваpipe +=строки с буфером бросит TypeError
Разбор
text += chunk превращает каждый буфер в строку отдельно. Если граница чанка попала в середину двухбайтовой буквы, обе половинки декодируются как мусор. Правильно: stream.setEncoding("utf8") (декодер склеит хвосты сам) или копить буферы и в конце Buffer.concat(chunks).toString().
endсрабатывает, когда все данные прочитаны в flowing-режиме,pipeне нужен.- Конкатенация строки с буфером не бросает ошибку, она вызывает
toString().
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Потоки и буферы»
- Пачки из асинхронного итератора
- Разбиение потока на строки по чанкам
- Запись с учётом backpressure
- Итоги платежей из CSV-выгрузки
- Слияние k отсортированных логов
- Топ эндпоинтов по access-логу с нормализацией маршрутов
- Сессии пользователей по потоку событий
- Код-ревью: выгрузка и загрузка больших файлов