将文件存储为对象中的字节数组或流?

时间:2016-10-10 16:33:27

标签: c#

我想知道哪种方式可以更好地存储文件?作为使用/TestPython /Lib (contains /site-packages/flask) /Include /resources (M) /Scripts /static(M) /templates (M) routes.py 或字节数组(Stream)的对象中的属性?

例如:

byte[]

vs

public class FileObject
{
     public string SomeMetaData {get; set;}
     public Stream Content {get; set;}
}

我有一个对象存储有关文件的一些元数据,它还有文件的文件内容。这个类将充当文件的容器,因此在保存之前我可以根据其元数据做一些逻辑。

我知道如果我使用Stream,我必须在完成之前调用Dispose,这使得传递对象更加困难,而不必担心其内容被丢弃。但是我不确定这是否是一个真正的问题,或者我还需要记住其他事情。

2 个答案:

答案 0 :(得分:2)

流是有状态对象。 如果两个代码一起使用你的课程,他们最终会争夺流的位置,并且无法工作。

如果可能发生这种情况,你绝对应该使用byte[]

答案 1 :(得分:1)

正如已经指出的那样,概念上,Stream是一种访问数据的方式,而不是数据本身。根据您的使用情况,这可能是您实际想要的,也可能不是。

如果你的意图是(听起来)用实际文件建模及其数据,那么byte[]可能更适合你的目的。你的任何一个班级'对该数据进行操作的方法应在其自己的MemoryStream块内创建自己的临时using实例。

如果想要创建一个包含Stream成员(或任何其他可支配成员)的类,那么您几乎应该始终在该类上实现IDisposable。 (如果你没有处理任何非托管资源,情况并不复杂。在这些情况下,你不需要一个具有完整配置模式的终结器,只需转发Dispose()打电话给每个一次性会员通常就足够了。)

相关问题