gpt4 book ai didi

c# - DeflateStream "skip"如果数据最初没有压缩,是否解压?

转载 作者:太空宇宙 更新时间:2023-11-03 11:31:49 25 4
gpt4 key购买 nike

我不熟悉 DeflateStream 的内部结构,但我需要将文件存储在供应商的数据库系统中,该系统在二进制附件上使用 DeflateStream。我注意到的第一件事是我的所有文件在压缩后都变大了 10-50%,但我将其归因于在已经高度压缩的文件(在本例中它们都是 PDF)之上使用了不太复杂的压缩算法。然而,我的问题涉及这样一个事实,即当我将原始文件写入 BLOB 时,供应商的应用程序打开它没有问题(它也打开了我用 deflate 压缩的附件)。压缩数据上是否有一个 header 告诉 DeflateStream 数据未压缩并且基本上按原样传递? This是规范;任何熟悉它的人都可以指出这是在哪里定义的 - 或者我是不是基地和供应商在幕后做一些魔术?

最佳答案

不,DeflateStream 中没有这样的魔法。

内置的 deflateStream 表现出压缩异常,其中先前压缩的数据实际上增加了大小。之前已将此报告给 Microsoft,但他们拒绝解决该问题。它与 DEFLATE 协议(protocol)的 DeflateStream 中的简单实现有关。我知道的避免问题的方法:

  • 使用不会出现此问题的替代 deflateStream。有关示例,请参见 DotNetZip。它包含一个可以正常工作的 DeflateStream。

  • 使用损坏的 DeflateStream,压缩流,比较大小,如果“压缩”流更大,则回退到使用“未压缩”流。

如果您选择前一种情况,您仍然会遇到压缩已经压缩的内容的情况。换句话说,不必要的双重压缩。所以你可能想考虑避免这种情况,不管你选择什么。

关于c# - DeflateStream "skip"如果数据最初没有压缩,是否解压?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7503021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com