Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# System.IO命名空间中MemoryStream类的相关性_C#_.net_Memory Management - Fatal编程技术网

C# System.IO命名空间中MemoryStream类的相关性

C# System.IO命名空间中MemoryStream类的相关性,c#,.net,memory-management,C#,.net,Memory Management,刚才我想到了为什么MemoryStream类出现在System.IO命名空间中 假设System.IO完全是关于磁盘等的输入/输出操作,MemoryStream将存储在内存中。有时您希望使用一种方法,将流作为输入,但您没有文件/网络/任何流来提供它。在本例中,创建一个MemoryStream,以提供一个接口,用于将数据写入字节数组包装器 假设System.IO是关于磁盘等的输入/输出操作 不,System.IO都是关于输入/输出操作的,从这个意义上讲,从内存流中写入或读取仍然是IO 这样说:如果

刚才我想到了为什么MemoryStream类出现在System.IO命名空间中


假设System.IO完全是关于磁盘等的输入/输出操作,MemoryStream将存储在内存中。

有时您希望使用一种方法,将
流作为输入,但您没有文件/网络/任何流来提供它。在本例中,创建一个
MemoryStream
,以提供一个接口,用于将数据写入字节数组包装器

假设System.IO是关于磁盘等的输入/输出操作

不,
System.IO
都是关于输入/输出操作的,从这个意义上讲,从内存流中写入或读取仍然是IO

这样说:如果将文件保存到
内存流
,这不是保存操作的输出吗?如果从
内存流
加载XML文档,这不是解析器的输入吗

各国:

System.IO命名空间包含允许读取和写入文件和数据流的类型,以及提供基本文件和目录支持的类型

MemoryStream
在您的视图中不是“数据流”吗?若否,原因为何


你为什么要把
记忆流
放进去?

我支持上面尊敬的Jon Skeet的回答,但我会补充一点理由

由于大多数编码用于操作数据流的操作都是在System.IO.Stream抽象类(不能直接实例化)上进行的,因此所有这些操作都将与从System.IO.Stream继承的任何操作兼容,例如System.IO.FileStream或System.IO.BufferedStream。这对我们的DEV来说是非常好的——只要存储介质有一个兼容的System.IO.Stream继承类来处理IO,我们就可以在任何我们喜欢的地方开发数据处理软件。我希望您会同意,文件系统访问等应该存在于System.IO中

然而,即使您确实认为内存不是真正的IO(我不同意这一点),System.IO.MemoryStream类仍然继承System.IO.Stream,并提供了一种巧妙且一致的方法来执行与使用System.IO.FileStream处理文件相同的操作,只需使用内存中的临时存储即可


正如Jon所说,由于它继承自System.IO.Stream,并为数据的输入和输出提供了一个抽象的内存备份存储,您将把它放在哪里呢?

实际上
System.IO
是关于文件和数据流的输入/输出操作。谁说IO只与磁盘有关?