Допустим, у меня есть какой-то текст:
Lorem ipsum dolor sit amet, consectetur adipiscing elit,\n
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris\n
nisi ut aliquip ex ea commodo consequat.\n
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore\n
eu fugiat nulla pariatur.\n
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia\n
deserunt mollit anim id est laborum.\n
Какой самый эффективный способ разрезать его на куски по x байтов, где разрез может произойти только при возврате каретки?
На ум приходят два метода:
разбить текст на строки, добавить строки в буфер, пока буфер не заполнится, откатить последнюю строку, вызвавшую переполнение, и повторить.
найти смещение в тексте по длине буфера и вернуться к предыдущему возврату каретки с правильной обработкой начала и конца текста
Мне не удалось найти решение в Интернете, но я не могу поверить, что эта проблема уже не решалась много раз, и может быть общая реализация этого.
Править :
дополнительная информация о моем случае использования:
Код предназначен для бота Telegram, который используется как средство связи с внутренней системой.
Telegram позволяет использовать до 4 КБ за сообщение и регулирует количество звонивших ls.
Сейчас я собираю все сообщения, помещаю их в параллельную очередь, а затем задачи сбрасывают очередь каждую секунду.
Сообщения могут быть одной строкой, могут быть набором строк и иногда может быть больше 4 КБ.
Я беру все сообщения (некоторые из которых состоят из нескольких строк в одном блоке), собираю их в одну строку, затем разделяю строку с помощью возврата каретки, а затем я могу составить блоки до 4кб. Еще одна проблема, с которой я еще не столкнулся, но это на будущее, заключается в том, что Telegram будет отклонять неполную разметку, поэтому мне также придется в какой-то момент обрезать текст на основе этого.