内存stream和文件stream之间的区别
在序列化期间,我们可以使用内存stream或文件stream。
这两者之间的基本区别是什么? 记忆stream是什么意思?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.Serialization.Formatters.Binary; namespace Serilization { class Program { static void Main(string[] args) { MemoryStream aStream = new MemoryStream(); BinaryFormatter aBinaryFormat = new BinaryFormatter(); aBinaryFormat.Serialize(aStream, person); aStream.Close(); } } }
stream是字节的表示。 这两个类都是根据定义抽象的Stream类派生的。
顾名思义,一个FileStream读取和写入文件,而一个MemoryStream读取和写入内存。 所以它涉及到stream的存储位置。
现在这取决于你打算如何使用这两个。 例如:让我们假设你想从数据库中读取二进制数据,你将进入一个MemoryStream。 但是,如果您想要读取系统上的文件,则需要使用FileStream。
MemoryStream的一个优点是不需要在应用程序中创build临时缓冲区和文件。
最简单的forms是,一个MemoryStream将数据写入内存,而一个FileStream将数据写入一个文件。
通常情况下,如果我需要一个stream,则使用MemoryStream,但是我不想要任何东西来打开磁盘,并且在将文件写入磁盘时使用FileStream。
当文件stream从文件读取时,可以使用存储器stream来读取映射到计算机内部存储器(RAM)中的数据。 你基本上是从内存读取/写入字节stream。
内存stream通过内存缓冲区处理数据。 文件stream处理磁盘上的文件。
在这个问题上有一个痛苦的经历,这是我发现的。 如果需要性能,则应该将文件stream的内容复制到内存stream中。 我不得不处理144个文件的内容,每个文件528KB,并将结果呈现给用户。 这花了250秒aprox。 (!!!!)。 当我只是将每个文件stream的内容复制到一个内存stream(CopyTo方法)而没有任何改变时,时间降到了大约32秒。 请注意,每当您将一个stream复制到另一个stream时,stream将被附加到目标stream的末尾,因此您可能需要在复制之前将其“倒回”。 希望能帮助到你。
在我看来,序列化对象在内存中几乎没有任何用处。 当你想把它保存在磁盘上时,你需要序列化一个对象。 通常情况下,从保存的序列化对象(在磁盘上)到对象(在内存中)进行反序列化时,序列化是从对象(在内存中)到磁盘完成的。
所以,大多数时候,你想要序列化到磁盘,因此你使用Filestream进行序列化。