【问题标题】:zlib, how to decompress stream of compressed data chunk?zlib,如何解压缩压缩数据块的流?
【发布时间】:2012-11-01 16:55:07
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

    标签: streaming zlib


    【解决方案1】:

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

    刷新确实会改变压缩结果,根据刷新频率和刷新方式,会略微或显着降低压缩结果。

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

    【讨论】:

    • 在 vnc 协议中,它们似乎会在屏幕更新后启动一个永无止境的 zlib 流并进行同步。在这种情况下和 OP 情况下,我希望同步刷新。对吗?
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多