3

服务器需要向客户端发送非常大的 zip 文件。压缩文件不能完整地保存在内存中(太大)或写入磁盘(同时发送的几个文件可能对硬盘来说太大) - 它必须直接流式传输到客户端。

有什么简单的方法吗?从我收集到的 zip 格式在其标题中有一个 CRC,因此您实际上无法在不完整创建它的情况下流式传输 zip...如果无法使用 zip 文件完成,请建议另一种格式。谢谢。

4

1 回答 1

3

您可以使用POCO 中提供的Inflate / Deflate流:

此流使用 zlib 的 deflate 算法压缩通过它的所有数据。将所有数据写入流后,必须调用 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 流。

于 2013-10-20T14:44:14.070 回答