首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Stream.CopyTo(Stream.Null)

Stream.CopyTo(Stream.Null)
EN

Stack Overflow用户
提问于 2016-11-16 06:34:45
回答 1查看 939关注 0票数 0

我想验证一下我的ZipArchive。为此,我将所有条目复制到MemoryStream。我只想知道我是否有能力打开和复制我的条目。

代码语言:javascript
运行
复制
    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更好?

代码语言:javascript
运行
复制
    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);
                }
            }
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-17 15:44:41

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

您可以检查底层流的Position,以确定它实际上正在消耗该流:

代码语言:javascript
运行
复制
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);
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40625521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档