Mat*_*zer 1 .net c# gzip gzipstream
我来了问答有没有办法知道byte[]是否被gzipstream压缩了?并且一些作者声明(这是真的)GZipStream将{0x1f, 0x8b, 8, 0, 0, 0, 0, 0, 4, 0}字符作为标头来了解字节数组是否是压缩字符串。
我的问题是,GZipStream 标头在 .NET 版本中是否可靠?
使用任何 GZip 格式流,您都可以保证:
前两个字节:1f,8b
下一个字节:00用于存储(无压缩)、01用于压缩算法、02用于打包、03用于 lzf 和08用于放气。.NET 到目前为止总是使用 deflate 并且许多情况只期望 deflate(Web 客户端只希望基于 deflate 的 gzip 作为传输或内容编码标记为gzip),因此如果没有某种选项来指定它,它不太可能改变添加。
下一个是文件类型,00意思是“可能是某种文本文件”,因为GZipStream没有关于文件类型的信息,所以它总是使用它。
接下来的四个是 Unix 格式的文件修改时间。同样,由于该类没有关于文件的信息——因为它接收的是一个流,而不是一个带有元数据的文件,所以这些总是设置为 0。
下一个字节取决于压缩方法。有了deflate它可以2指示重压缩或4指示光压缩。
下一个(序列中的最后一个)取决于使用的操作系统类型。0意思是“FAT 文件系统”,但 Windows 继续使用,因为 Windows 已转向使用其他文件系统,如 NTFS。如果在非 Windows 文件系统上与 Mono 一起使用,它可能具有不同的值,尽管这种情况也可能决定匹配 .NET 行为。(更新:至少某些版本的 Mono 会将文件系统标志设置0为非 Windows 系统上的其他内容)。