Stream.CopyTo(Stream.Null)

时间:2016-11-16 06:34:45

标签: c# stream

我想验证我的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);
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

复制到空流将起作用,并且正如您所发现的那样,不需要额外的内存来保存流中的数据。

您可以检查基础流的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);
    }
}