如何判断字节数组是否已被压缩?

时间:2010-04-26 09:42:40

标签: .net compression

我可以依赖使用.NET中System.IO.Compression.DeflateStream压缩的数据的前几个字节始终相同吗?

这些字节似乎总是第一个字节:  237,189,7,96,28,73,150,37,38,47,......

我假设这是某种标题,我想假设这个标题是固定的,不会改变。

有没有人有任何关于此的额外信息?

背景信息(我想知道此信息的原因是......)

我在数据库表中有大量数据可以做得更小。 我已经决定开始压缩数据而不打算压缩现有数据。 当数据进入我的.NET代码时,数据就是一个字符串。

我希望能够查看字符串的前几个字节并查看它是否已被压缩,如果有,那么我需要对其进行解压缩。

我原本以为我可以将字符串转换为字节,只是尝试解压缩数据。然后,如果发生异常,我可以假设它没有被压缩。 但我认为检查标头字节会给我带来更好的性能。

非常感谢, 迈克G

2 个答案:

答案 0 :(得分:1)

为了安全起见(除非在某处记录),请在前面贴上自己的魔法标题。 GUID是一个很好的选择。

答案 1 :(得分:0)

在.NET 4.0中对GZipStream进行了一些改进,以防止这种情况发生。也许迁移到.NET for是一个选项:

  

System.IO.Compression中的压缩算法在.NET 4中得到了改进。   DeflateStream和GZipStream不再膨胀已经压缩的数据。 source