DeflateStream CopyTo MemoryStream - PullRequest
       11

DeflateStream CopyTo MemoryStream

0 голосов
/ 01 июля 2018

Tyring для сжатия и распаковки MemoryStream, но кажется, что CopyTo не работает так, как ожидалось? Зачем? Как это исправить?

public static MemoryStream Compress(MemoryStream originalStream)
{
    Console.WriteLine("Original before compressing size: {0}", originalStream.Length.ToString());
    MemoryStream compressedMemoryStream = new MemoryStream();

    using (DeflateStream deflateStream = new DeflateStream(compressedMemoryStream, CompressionMode.Compress, true))
    {
        originalStream.CopyTo(deflateStream);
    }
    Console.WriteLine("Compressed size: {0}", compressedMemoryStream.Length.ToString());
    return compressedMemoryStream;
}

public static void Decompress(MemoryStream compressedStream)
{
    Console.WriteLine("Compressed before decompressing size: {0}", compressedStream.Length.ToString());
    using (MemoryStream decompressedFileStream = new MemoryStream())
    {
         using (DeflateStream decompressionStream = new DeflateStream(compressedStream, CompressionMode.Decompress, true))
         {
              decompressionStream.CopyTo(decompressedFileStream);
         }
         Console.WriteLine("Decompressed size: {0}", decompressedFileStream.Length.ToString());
    }
}

Выход:

Original before compressing size: 5184054
Compressed size: 0
Compressed before decompressing size: 0
Decompressed size: 0

1 Ответ

0 голосов
/ 01 июля 2018

CopyTo начинает копирование байтов из текущей позиции исходного потока.

Поскольку вы опубликовали размер сжатого потока, равный 0, я вполне уверен, что originalStream расположен в конце потока, поэтому ни один байт не был скопирован / сжат.

Убедитесь, что позиция 0, чтобы он мог найти любые данные для копирования и сжатия в ваш поток.

Как упоминалось в @xanatos, то же самое относится и к Decompress, поэтому убедитесь, что compressedStream также находится в 0, прежде чем распаковывать его.

...