2016-10-10 55 views
0

我想知道哪種方式是更好的方式來存儲文件?作爲使用Stream或字節數組(byte[])的對象中的屬性?將文件作爲字節數組或流存儲在對象中?

例如:

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

VS

public class FileObject 
{ 
    public string SomeMetaData {get; set;} 
    public byte[] Content {get; set;} 
} 

我有一個存儲有關文件的一些元數據的對象,它也有該文件的文件內容。這個類將作爲文件的容器,所以我可以在保存之前根據元數據做一些邏輯。

我知道如果使用Stream,我必須在處理完之前調用Dispose,這會使得難以傳遞對象而無需擔心其內容被丟棄。不過,我不確定這是一個真正的問題還是我需要牢記的其他事情。

+2

「流」只表示對數據進行操作,而不是數據本身。 –

+1

@ DanielA.White:除非它是一個MemoryStream。 – SLaks

+0

所以你的問題真的取決於你如何獲得你的數據。從文件系統,或從Web API或從COM ... –

回答

2

流是一個有狀態的對象。 如果兩段代碼一起使用你的課程,他們最終會爭奪流的位置,並且無法工作。

如果這一切都有可能發生,那麼您一定要使用byte[]

+0

寫入'byte []'數組在多線程環境中也有風險。 –

1

正如我們已經指出的那樣,Stream在概念上是一種訪問數據的手段,而不是數據本身。根據您的使用情況,這可能或可能不是您實際需要的。

如果你的意圖是(用聽起來的)來模擬實際的文件和它的數據,那麼byte[]可能更適合你的目的。任何使用該數據的類的方法都應該在其自己的using塊中創建自己的臨時MemoryStream實例。

如果你想想創建一個Stream成員(或任何其他一次性成員)的類,那麼你應該幾乎總是在該類上實現IDisposable。 (如果你不處理任何非託管資源,這並不複雜,在這種情況下,你不需要使用全面配置模式的終結器,只需將Dispose()呼叫轉發給每個一次性成員就足夠了。)

相關問題