【问题标题】:Reverse action of ICSharpCode...InflaterInputStream in C#ICSharpCode...InflaterInputStream 在 C# 中的反向操作
【发布时间】:2011-03-21 10:49:11
【问题描述】:

我正在使用 ICSharpCode.SharpZipLib.dll 来压缩和解压缩数据。
我有以下执行数据膨胀的代码:

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 为假。
有什么想法吗?
谢谢你的到来。

【问题讨论】:

  • 哪两个数组不相等?你是说你的压缩和解压结果不一样?详细描述问题(您可以编辑自己的答案:点击标签下的edit
  • 你能同时指定你正在使用的库吗?
  • 我按照您的要求编辑了帖子

标签: c# compression sharpziplib


【解决方案1】:

压缩缓冲区从何而来?它也被 SharpZipLib 压缩了吗?具有相同的压缩级别和选项?如果不是,您不应该期望解压缩/重新压缩的缓冲区等于原始缓冲区...

【讨论】:

  • Correct-DEFLATE 压缩不保证不同压缩器生成的压缩流是相等的。 DEFLATE 压缩仅表示在解压缩时,解压缩的流将等于原始未压缩的流。导致压缩字节流不同的因素是字典选项、窗口大小(压缩级别)等。
猜你喜欢
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多