Обратное действие ICSharpCode ... InflaterInputStream в C # - PullRequest
1 голос
/ 21 марта 2011

Я использую 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 неверно.
Есть идеи?
Спасибо за продвижение.

1 Ответ

3 голосов
/ 07 апреля 2011

Откуда берется сжатый буфер?Это тоже было сжато SharpZipLib?С таким же уровнем сжатия и опциями?Если нет, вы не должны ожидать, что распакованный / повторно сжатый буфер будет равен оригиналу ...

...