题
是的系统。IO.压缩。GZipStream或系统。IO.压缩。放兼容zlib compression?
解决方案
从 MSDN 关于系统。IO.压缩。GZipStream:
这类表示的gzip数据格式,它利用一个行业标准算法的无损的文件压缩和解压。
从 zlib常见问题:
Gz*功能在zlib另一方面使用的gzip格式。
所以zlib和GZipStream应该是可互操作,但仅仅如果您使用的zlib的功能用于处理gzip-格式。
系统。IO.压缩。放和zlib据报是不可互操作的。
如果你需要压缩文件处理(你可能不,但是其他人可能需要的此)需要使用 SharpZipLib 或另一第三方图书馆。
其他提示
DotNetZip 包括DeflateStream,ZlibStream和GZipStream,以处理RFC1950年,于1951年和1952年。所有使用压缩算法的,但本框架和头字节不同,对每一个。
作为一个优点,流DotNetZip不会出现的 异常的扩大数据的尺寸 下压缩报告的内流。此外,没有内在的ZlibStream,而DotNetZip给你的,对于良好的互操作与zlib.
我遇到这个问题}类对象。在这一特定情况下,他们储存的目的,作为泄气的斑点有Zlib头,这是记录在案 RFC1950年.你可以做一个兼容blob通过制作文件,该文件包含:
- 两头字节(家庭和妇女国家发展中心和FLG从RFC1950)的价值
0x78 0x01
CM
=8=放气CINFO
=7=32Kb窗口FCHECK
=1=校位于这个头
- 输出的C#
DeflateStream
- 一个Adler32校验的输入数据
DeflateStream
, big-endian格式(优先)
我做我自己的Adler执行情况
public class Adler32Computer
{
private int a = 1;
private int b = 0;
public int Checksum
{
get
{
return ((b * 65536) + a);
}
}
private static readonly int Modulus = 65521;
public void Update(byte[] data, int offset, int length)
{
for (int counter = 0; counter < length; ++counter)
{
a = (a + (data[offset + counter])) % Modulus;
b = (b + a) % Modulus;
}
}
}
那是很多的。
我用GZipStream压缩输出来的。净序列化程序和它的工作完全没压缩的结果与gunzip(在cygwin),因而另一GZipStream.
对于参考,这是我在代码:
FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write);
using (GZipStream gzStream = new GZipStream(fs, CompressionMode.Compress))
{
XmlSerializer serializer = new XmlSerializer(typeof(MyDataType));
serializer.Serialize(gzStream, myData);
}
然后,来解在c#
FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
using (Stream input = new GZipStream(fs, CompressionMode.Decompress))
{
XmlSerializer serializer = new XmlSerializer(typeof(MyDataType));
myData = (MyDataType) serializer.Deserialize(input);
}
使用'文件'实用工具在cygwin显示,确有差别的同一文件压缩与GZipStream和与GNU GZip(可能是头信息,如其他人已经指出,在这个螺纹)。这种差异,但是,似乎不论在实践。
gzip是放气+某些头/脚的数据,像一个检验和长度等。所以他们不兼容,在这个意义上,一个方法可以使用流从其他的,但他们采用相同的压缩算法。
他们只是压缩的数据使用zlib或压缩算法,但是不提供的产出用于一些特定文件格式。这意味着,如果你存放的流-是的硬盘驱动器,最有可能你会不能够打开它使用的一些应用程序(gzip或压缩),因为文件的标题(魔术的人数,等等)不包含在流一个你应该写他们自己。
从。净框架4.5的 System.IO.Compression.DeflateStream
类使用zlib library.
从类的 MSDN文章:
这类表示的紧缩算法,这是一个行业标准算法的无损的文件压缩和解压。开始的。净框架4.5,DeflateStream类使用zlib library.结果,它提供了一个更好的压缩算法,在大多数情况下,较小的压缩的文件比它提供了在早期版本的.净框架。
我同意安德烈亚斯。你可能不能打开文件,在一个外部工具,但如果该工具预计流你可能可以使用它。你也可以放文件使用相同的压缩类。