Здравствуйте, vladt, Вы писали:
V>Задачка: V>есть файл — он считывается в процедуре, обрабатывается V>на выходе должен получиться блок данных, который содержит часть файла. V>Вот тут возникает проблема, как представить этот блок. V>Если делать byte *ar, то тут проблема в том, что готовый блок может быть очень очень большим и следовательно нехилый нагруз на память.
V>Важное замечание — выходной блок данных должен быть пригоден V>для передачи по сети, те должно быть что то типа байт массива. V>Задачка усугубляется тем, что нельзя самому писать поток по сети на приемник.
V>Кто нибудь сталкивался с такой проблемой и какие есть варианты для ее решения?
1. Хранить и обрабатывать блок на стороне сервера, и отдавать клиенту кусками, по запросу.
Как именно этот блок хранится — не особо важно. Например, в файле с произвольным доступом.
Если клиентов много, то блоки нужно уникально идентифицировать, грубо говоря, хэндлами этих файлов.
Для межмашинного взаимодействия, когда нет гарантии, что клиент отправит запрос на закрытие хэндла, — ввести срок хранения. Скажем, по истечении 10 минут после последнего запроса закрывать хэндл (и убивать блок) принудительно.
2. Хранить/передавать блок в сжатом виде. Например, с помощью zlib или, если известен характер данных, — собственным упаковщиком.