SevenZip, много конечных 0 - PullRequest
1 голос
/ 20 сентября 2009

Мой массив 140 байтов. outArray составляет 512 байт ... Не то, что я хотел. Также я не знаю, правильно ли я шифрую. Правильный ли приведенный ниже код? как я могу это исправить, чтобы outArray был реальным размером, а не фиксированным со многими конечными нулями?

        var compress = new SevenZipCompressor();
        compress.CompressionLevel = CompressionLevel.Ultra;
        compress.CompressionMethod = CompressionMethod.Lzma;
        compress.ZipEncryptionMethod = ZipEncryptionMethod.Aes256;
        var sIn = new MemoryStream(inArray);
        var sOut = new MemoryStream();
        compress.CompressStream(sIn, sOut, "a");
        byte[] outArray = sOut.GetBuffer();

Ответы [ 2 ]

4 голосов
/ 20 сентября 2009

Вы получаете весь буфер MemoryStream, вам нужно использовать ToArray (),

  byte[] outArray = sOut.ToArray();

Это удалит завершающие нули, но вы все равно можете получить массив больше, чем ввод. Сжатие / шифрование накладных расходов, вероятно, больше 140 байт.

1 голос
/ 20 сентября 2009

Многие алгоритмы сжатия (я не знаком с конкретными деталями для 7-zip) генерируют выходные данные с минимальным выходным размером 7-zip лучше всего работает с большими наборами входных данных, а 140 байтов не являются «большими». Вы могли бы сделать лучше с чем-то вроде gzip или lzo. Какие еще алгоритмы сжатия вы пробовали?

...