标签: c++ stream zip client-server buffer
服务器需要向客户端发送非常大的zip文件。压缩文件不能完整保存在内存中(太大)或写入磁盘(同时发送的多个文件对于硬盘来说可能太大) - 必须直接流式传输到客户端。
对此有何简单的认可?从我收集的内容来看,zip格式在其标题中有一个CRC,因此如果不完整地创建它,您实际上无法实现流式传输... 如果无法使用zip文件,请提供其他格式。感谢。
答案 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流。
ostr