我在通过网络传输压缩数据时遇到问题。
数据大小约为几百 MB。我的计划是将数据分成 1MB 块并用 zlib 压缩每个块,然后通过网络传输压缩数据。在网络的另一端,数据将被 zlib 解压。
我的问题是,由于我流式传输压缩数据,因此不会有关于每个压缩块在流中开始和结束的位置的信息。我不确定 zlib 是否可以解压缩这样的压缩数据流。
如果 zlib 可以,请告诉我应该在放气/充气方法中使用什么刷新模式?
谢谢!
如果您使用的策略是必须的,您可以在主机和远程之间建立一个协议,例如:
02 123456 the-compressed-data 654321 the-compressed-data
这3个数字分别是:1.数据块的数量,这里是2个块2.第一个块的字节数3.第二个块的字节数。
不清楚为什么要将数据分成块,或者为什么需要进行任何特殊的刷新。如果您只是将数据以块的形式提供给 zlib,那么这就是通常使用 zlib 的方式。zlib 不在乎你如何向它提供数据——大块、小块、一次一个字节、一个大块等,都不会改变压缩结果。
冲洗确实会改变压缩结果,根据您冲洗的频率和冲洗方式,稍微或显着降低它。
当您希望确保在压缩数据的已知边界处完全接收到部分数据时,或者如果您希望能够恢复部分数据(如果未接收到全部数据),则使用刷新。