Распаковка и Сжатие назад не возвращает тот же контент

Почему я не получаю тот же контент после распаковки и сжатия байтового массива с помощью DeflateStream?

Код:

byte[] originalcontent = Same Byte Array Content
byte[] decompressedBytes;
byte[] compressedBackBytes;

// Decompress the original byte-array
using (Stream contentStream = new MemoryStream(originalcontent, false))
using (var zipStream = new DeflateStream(contentStream, CompressionMode.Decompress))
using (var decStream = new MemoryStream())
{
    zipStream.CopyTo(decStream);
    decompressedBytes = decStream.ToArray();
}

// Compress the byte-array back
using (var input = new MemoryStream(decompressedBytes, true))
using (var compressStream = new MemoryStream())
using (var compressor = new DeflateStream(compressStream, CompressionMode.Compress))
{
    input.CopyTo(compressor);
    compressedBackBytes = compressStream.ToArray();
}

Почему оригинальное содержание!= CompressBackBytes?

1 ответ

Решение

Похоже, что вы все сделали правильно, пока вы не взяли исходный поток ввода и не перезаписали свой компрессор, который содержит ваши распакованные байты. Вы должны поместить свои байты компрессора в сжатые байты.

Ваш ввод (начиная с распаковки), кажется, копирует в него распакованные байты; затем вы копируете его в компрессор, который перезаписывает то, что вы только что распаковали.

Может быть, вы имели в виду что-то вроде

compressedBackBytes = compressor.ToArray();
Другие вопросы по тегам