Код Middle Потоки и буферы спрашивают часто обновлено
Разбиение потока на строки по чанкам
Условие
Данные из сокета или файла приходят чанками, граница чанка может пройти посреди строки и даже между \r и \n. Напиши createLineSplitter(), возвращающую объект:
push(chunk): принимает строку-чанк, возвращает массив полных строк, которые завершились в этом чанке (без символов перевода строки);flush(): вызывается в конце потока, возвращает массив с хвостом без перевода строки (если хвост непустой) или пустой массив.
Разделители строк: \n и \r\n. Пустые строки между разделителями сохраняются.
Что проверяют тесты
строка разорвана между чанками
несколько строк в одном чанке
CRLF разорван между чанками
пустые строки сохраняются
пустой поток
посимвольная подача
Как подойти
Подсказки: 3
- Держи «хвост» незавершённой строки между вызовами.
- Склей хвост с чанком, раздели по
\n, последний кусок снова станет хвостом. \rсрезай только у завершённых строк, у хвоста он может оказаться началом\r\n.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Термины по теме
Ещё по теме «Потоки и буферы»
- Итоги платежей из CSV-выгрузки
- Слияние k отсортированных логов
- Топ эндпоинтов по access-логу с нормализацией маршрутов
- Сессии пользователей по потоку событий
- Код-ревью: выгрузка и загрузка больших файлов
- Загрузка файлов по 5 ГБ через Node-сервис
- Чем pipeline лучше pipe
- Buffer.allocUnsafe