首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MemoryStream写出

使用MemoryStream写出
EN

Stack Overflow用户
提问于 2009-01-28 08:10:25
回答 6查看 41.7K关注 0票数 8

我注意到有两种不同的方法将数据写到XML文件中(为简洁起见,省略了错误处理)。

第一种方法是构建XML文档,然后简单地将XML保存到文件中:

代码语言:javascript
复制
using (XmlWriter writer = XmlWriter.Create(fileName))
{
    writer.WriteStartDocument(true);
    writer.WriteStartElement("parentelement");
    writer.WriteEndElement();
    writer.WriteEndDocument();
}

第二种方法是创建一个MemoryStream,然后将MemoryStream保存到一个文件中:

代码语言:javascript
复制
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
MemoryStream ms = new MemoryStream();
using (XmlWriter writer = XmlWriter.Create(ms, settings))
{
    writer.WriteStartDocument(true);
    writer.WriteStartElement("parentelement");
    writer.WriteEndElement();
    writer.WriteEndDocument();
}

using (FileStream fs = File.Open(fileName, FileMode.Create, FileAccess.Write))
{
    ms.WriteTo(fs);
    ms.Dispose();
}

我猜测使用MemoryStream的逻辑是为了确保可以在尝试保存文件之前构建该文件。在向MemoryStream文件中添加条目时,XML方法是否提供原子写事件和/或防止写问题?

有没有人能解释一下,这是不是真的有必要,或者只是向我的项目中添加不必要的代码行的一种过度杀伤力?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-01-28 08:21:22

在这种情况下,MemoryStream版本是浪费的。如果您想执行Stream-like工作,但又不想要实际的文件,那么MemoryStream是很有用的。如果你正在写一个文件,那么只需要写这个文件就行了。如果你正在写一个文件,那就直接写到这个文件中去。(a file )这就避免了在内存中缓冲所有数据的需要。

票数 15
EN

Stack Overflow用户

发布于 2009-11-02 00:17:38

内存流方法对于简单的操作确实是浪费的,但对于将xml保存为加密文件、压缩文件等情况,它是非常有用的。

票数 3
EN

Stack Overflow用户

发布于 2009-01-28 08:23:40

这是一种过度的杀伤力和浪费。

这两种关键方法都是基于

  1. 直到最后您才知道文档的完整结构。
  2. 当您‘创建’文档的各个部分时,您就知道它们是文档这一部分的最终形式。

第一种方法需要创建文档的内存模型( DOM模型就是为其设计的)。一旦你完成了它,直接写入文件流就可以了。

第二种方法可以节省大量的内存和复杂性,只需使用XmlWriter,它可以直接指向结束流(在本例中是文件流)。

在任何阶段都不需要使用MemoryStream

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/486843

复制
相关文章

相似问题

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