簡體   English   中英

Stream.CopyTo(Stream.Null)

[英]Stream.CopyTo(Stream.Null)

我想驗證我的ZipArchive。 為此,我將所有條目復制到MemoryStream。 我只想了解我是否可以打開並復制我的條目。

    public void ZipVerification(Stream stream)
    {
        using (var memoryStream = new MemoryStream())
        using (var zip = new ZipArchive(stream, ZipArchiveMode.Read))
        {
            foreach (var entry in zip.Entries)
            {
                using (var entryStream = entry.Open())
                {
                    entryStream.CopyTo(memoryStream);
                }
            }
        }
    }

但是這種方法消耗了我的記憶。 使用Stream.Null代替MemoryStream是否更好?

    public void ZipVerification(Stream stream)
    {
        using (var zip = new ZipArchive(stream, ZipArchiveMode.Read))
        {
            foreach (var entry in zip.Entries)
            {
                using (var entryStream = entry.Open())
                {
                    entryStream.CopyTo(Stream.Null);
                }
            }
        }
    }

復制到空流將起作用,並且如您所見,將不需要額外的內存來保存流中的數據。

您可以檢查基礎流的Position ,以查看它實際上正在消耗該流:

public static void ZipVerification()
{
    using (var zip = new ZipArchive(stream, ZipArchiveMode.Read))
    {
        // Print stream position before.
        Console.WriteLine(stream.Position);

        foreach (var entry in zip.Entries)
        {
            using (var entryStream = entry.Open())
            {
                entryStream.CopyTo(System.IO.Stream.Null);
            }
        }

        // Print stream position after.
        Console.WriteLine(stream.Position);
    }
}

暫無
暫無

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

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