缓冲压缩流C ++

时间:2013-10-20 14:31:08

标签: c++ stream zip client-server buffer

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

对此有何简单的认可?从我收集的内容来看,zip格式在其标题中有一个CRC,因此如果不完整地创建它,您实际上无法实现流式传输... 如果无法使用zip文件,请提供其他格式。感谢。

1 个答案:

答案 0 :(得分:3)

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

  

此流使用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流。