Распаковка и сжатие обратно не возвращают тот же контент

Почему я не получаю тот же контент после распаковки и сжатия массива байтов с помощью 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();
}

Почему originalcontent != сжатыйBackBytes?


person Roi Bar    schedule 05.09.2018    source источник
comment
возможно, очистите свой поток stackoverflow.com/questions/10599596/   -  person Any Moose    schedule 05.09.2018
comment
Почему вы сначала распаковываете, а потом сжимаете? Почему бы не сжать, а потом распаковать?   -  person DanB    schedule 05.09.2018
comment
Были ли исходные сжатые данные сгенерированы с использованием того же кода с теми же параметрами?   -  person Robert    schedule 05.09.2018
comment
Сброс потока, как написано в stackoverflow.com/questions/10599596/   -  person Roi Bar    schedule 07.11.2018


Ответы (1)


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

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

Возможно, вы имели в виду что-то вроде

compressedBackBytes = compressor.ToArray();
person Andrew Jay    schedule 05.09.2018