我得到了一个压缩数据字节数组,它占用27878个字节。它以
开头78-9C-ED-BD-09
,因此它应该可以通过DeflateStream读取。未压缩的数据是XML文件。我想修改此XML中的某些值,然后再次对其进行压缩,以将其保存回其源。
但是,即使不做任何修改,只是解压缩并再次压缩结果与源代码不同,这导致目标应用程序读取该字节数组时崩溃。
对于压缩和解压缩,我使用了Stackoverflow中的这些方法
private static MemoryStream Decompress(byte[] input)
{
var output = new MemoryStream();
using (var compressStream = new MemoryStream(input))
using (var decompressor = new DeflateStream(compressStream, CompressionMode.Decompress))
decompressor.CopyTo(output);
output.Position = 0;
return output;
}
public byte[] Compress(byte[] input)
{
MemoryStream stream = new MemoryStream();
DeflateStream compressionStream =
new DeflateStream(stream, CompressionMode.Compress);
compressionStream.Write(input, 0, input.Length);
compressionStream.Close();
return stream.ToArray();
}
修改19年4月23日
正如已指出的一条注释已被删除一样,deflate方法不适用于压缩数据。相反,使用DotNetZip库和该库中的某些功能,可以再次创建相同的数据!