C# C中ICSharpCode…充气输入流的反向操作#
我正在使用ICSharpCode.SharpZipLib.dll压缩和解压缩数据。C# C中ICSharpCode…充气输入流的反向操作#,c#,compression,sharpziplib,C#,Compression,Sharpziplib,我正在使用ICSharpCode.SharpZipLib.dll压缩和解压缩数据。 我有以下执行数据膨胀的代码: public static byte[] ZLibDecompress(byte[] zLibCompressedBuffer) { byte[] resBuffer = null; MemoryStream mInStream = new MemoryStream(zLibCompressedBuffer); MemoryStream mOutStream
我有以下执行数据膨胀的代码:
public static byte[] ZLibDecompress(byte[] zLibCompressedBuffer)
{
byte[] resBuffer = null;
MemoryStream mInStream = new MemoryStream(zLibCompressedBuffer);
MemoryStream mOutStream = new MemoryStream(zLibCompressedBuffer.Length);
InflaterInputStream infStream = new InflaterInputStream(mInStream);
mInStream.Position = 0;
try
{
byte[] tmpBuffer = new byte[zLibCompressedBuffer.Length];
int read = 0;
do
{
read = infStream.Read(tmpBuffer, 0, tmpBuffer.Length);
if (read > 0)
mOutStream.Write(tmpBuffer, 0, read);
} while (read > 0);
resBuffer = mOutStream.ToArray();
}
finally
{
infStream.Close();
mInStream.Close();
mOutStream.Close();
}
return resBuffer;
}
这段代码实际上是有效的,现在我想把结果压缩回去。这是我的代码:
public static byte[] ZLibCompress(byte[] buffer)
{
byte[] resBuffer = null;
MemoryStream mOutStream = new MemoryStream(buffer.Length);
DeflaterOutputStream defStream = new DeflaterOutputStream(mOutStream);
try
{
defStream.Write(buffer, 0, buffer.Length);
defStream.Flush();
defStream.Finish();
resBuffer = mOutStream.ToArray();
}
finally
{
defStream.Close();
mOutStream.Close();
}
return resBuffer;
}
但两个函数的两个结果数组并不相等:
byte[] unCompBuffer = ZipUtils.ZLibDecompress(zLibBuffer);
byte[] compBuffer = ZipUtils.ZLibCompress(unCompBuffer);
bool eq = compBuffer.SequenceEqual(zLibBuffer);
eq为假。有什么想法吗?
谢谢您的介绍。压缩缓冲区来自哪里?它也被SharpZipLib压缩了吗?使用相同的压缩级别和选项?如果不是,您不应该期望解压缩/重新压缩的缓冲区等于原始的…哪两个数组不相等?你是说你的压缩和解压缩结果不一样吗?详细描述问题(你可以编辑自己的答案:点击标签下的
edit
)你还可以指定你正在使用的库吗?我像你要求的那样编辑了帖子正确-DEFLATE compression不能保证不同压缩器生成的压缩流相等。DEFLATE compression仅表示在解压缩时,解压缩的流将等于原始的未压缩流。导致压缩字节流不同的因素有字典选项、窗口大小(压缩级别)等。