После повторного сжатия данных результат отличается от несжатого источника.Как мне снова воспроизвести те же данные? - PullRequest
1 голос
/ 21 апреля 2019

Мне дан байтовый массив сжатых данных, который занимает 27878 байтов.Он начинается с

78-9C-ED-BD-09 

, поэтому он должен быть читаемым с DeflateStream.Несжатые данные - это файл XML.Я хочу изменить некоторые значения в этом XML, а затем снова сжать его, чтобы сохранить его в исходном коде.

Но даже без каких-либо модификаций, просто распаковка и сжатие снова, результат отличается от источника, что приводит к сбою target-application, который читает этот байтовый массив.

Для сжатия и распаковки я использовал эти методы, найденные в Stackoverflow

private static MemoryStream Decompress(byte[] input)
{
    var output = new MemoryStream();

    using (var compressStream = new MemoryStream(input))
    using (var decompressor = new DeflateStream(compressStream, CompressionMode.Decompress))
        decompressor.CopyTo(output);

    output.Position = 0;
    return output;
}
public byte[] Compress(byte[] input)
{


    MemoryStream stream = new MemoryStream();
    DeflateStream compressionStream =
        new DeflateStream(stream, CompressionMode.Compress);
    compressionStream.Write(input, 0, input.Length);

    compressionStream.Close();

    return stream.ToArray();
}

Редактировать 04/23/19

Как было отмечено, комментарий, который был удален, методы deflate не подходят для сжатия данных.Вместо этого с помощью библиотеки DotNetZip и некоторой работы в этой библиотеке можно было снова создать те же данные!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...