簡體   English   中英

DeflateStream CopyTo MemoryStream

[英]DeflateStream CopyTo MemoryStream

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

CopyTo開始從源流的當前位置復制字節。

由於您發布的結果壓縮流大小為0,我很確定originalStream位於流的末尾,因此沒有復制/壓縮字節。

確保位置為0以便可以找到要復制和壓縮到流的任何數據。

正如@xanatos所提到的,同樣適用於Decompress ,因此在解壓縮之前確保compressedStream也定位在0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM