3

我在通过网络传输压缩数据时遇到问题。

数据大小约为几百 MB。我的计划是将数据分成 1MB 块并用 zlib 压缩每个块,然后通过网络传输压缩数据。在网络的另一端,数据将被 zlib 解压。

我的问题是,由于我流式传输压缩数据,因此不会有关于每个压缩块在流中开始和结束的位置的信息。我不确定 zlib 是否可以解压缩这样的压缩数据流。

如果 zlib 可以,请告诉我应该在放气/充气方法中使用什么刷新模式?

谢谢!

4

2 回答 2

1

如果您使用的策略是必须的,您可以在主机和远程之间建立一个协议,例如:

02 123456 the-compressed-data 654321 the-compressed-data

这3个数字分别是:1.数据块的数量,这里是2个块2.第一个块的字节数3.第二个块的字节数。

于 2014-11-14T03:30:50.423 回答
1

不清楚为什么要将数据分成块,或者为什么需要进行任何特殊的刷新。如果您只是将数据以块的形式提供给 zlib,那么这就是通常使用 zlib 的方式。zlib 不在乎你如何向它提供数据——大块、小块、一次一个字节、一个大块等,都不会改变压缩结果。

冲洗确实会改变压缩结果,根据您冲洗的频率和冲洗方式,稍微或显着降低它。

当您希望确保在压缩数据的已知边界处完全接收到部分数据时,或者如果您希望能够恢复部分数据(如果未接收到全部数据),则使用刷新。

于 2012-11-13T18:24:33.263 回答