Код Middle Потоки и буферы спрашивают часто обновлено

Разбиение потока на строки по чанкам

Условие

Данные из сокета или файла приходят чанками, граница чанка может пройти посреди строки и даже между \r и \n. Напиши createLineSplitter(), возвращающую объект:

  • push(chunk): принимает строку-чанк, возвращает массив полных строк, которые завершились в этом чанке (без символов перевода строки);
  • flush(): вызывается в конце потока, возвращает массив с хвостом без перевода строки (если хвост непустой) или пустой массив.

Разделители строк: \n и \r\n. Пустые строки между разделителями сохраняются.

Что проверяют тесты

  • строка разорвана между чанками

  • несколько строк в одном чанке

  • CRLF разорван между чанками

  • пустые строки сохраняются

  • пустой поток

  • посимвольная подача

Как подойти

Подсказки: 3
  1. Держи «хвост» незавершённой строки между вызовами.
  2. Склей хвост с чанком, раздели по \n, последний кусок снова станет хвостом.
  3. \r срезай только у завершённых строк, у хвоста он может оказаться началом \r\n.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.