DeflateStream 复制到内存流

A19*_*919 4 c# memorystream deflate

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Original before compressing size: 5184054
Compressed size: 0
Compressed before decompressing size: 0
Decompressed size: 0
Run Code Online (Sandbox Code Playgroud)

Ray*_*Ray 5

CopyTo从源流的当前位置开始复制字节。

由于您发布的压缩流大小为 0,我很确定它originalStream位于流的末尾,因此没有复制/压缩字节。

确保该位置0可以找到要复制和压缩到您的流中的任何数据。

正如@xanatos 提到的,这同样适用于Decompress,因此请确保compressedStream在解压缩之前也将其定位在 0 处。