Сервер должен отправить очень большой zip-файл клиенту. Заархивированный файл не может быть сохранен полностью в памяти (слишком большой) или записан на диск (несколько файлов, отправляемых одновременно, могут быть слишком большими для жесткого диска) — он должен быть передан непосредственно клиенту.
Какие-нибудь простые подходы к этому? Из того, что я понял, формат zip имеет CRC в заголовке, так что вы не можете на самом деле передавать поток zip, не создав его полностью …
Если это невозможно сделать с помощью zip-файлов, предложите альтернативный формат. Благодарю.
Ты можешь использовать раздувать/выкачивать потоки, предоставляемые в POCO:
Этот поток сжимает все данные, проходящие через него, используя zlib
алгоритм сдувания. После того, как все данные были записаны в поток,
close () должен быть вызван для обеспечения завершения сжатия.
std::ofstream ostr("data.gz", std::ios::binary);
DeflatingOutputStream deflater(ostr, DeflatingStreamBuf::STREAM_GZIP);
deflater << "Hello, world!" << std::endl;
deflater.close();
ostr.close();
Вы можете перенаправить это ostr
в ваш поток TCP.
Других решений пока нет …