簡體   English   中英

在C#中將字節數組保存為磁盤上文件的最有效方法是什么?

[英]What is the most efficient way to save a byte array as a file on disk in C#?

很簡單的場景。 我有一個Web服務,它接收一個字節數組,該數組將保存為磁盤上的特定文件類型。 在C#中執行此操作的最有效方法是什么?

那將是File.WriteAllBytes()

System.IO.File.WriteAllBytes(path, data)應該沒問題。

而WriteAllBytes只是執行

using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read))
{
    stream.Write(bytes, 0, bytes.Length);
}

BinaryWriter有一個誤導性的名稱,它用於將原語寫為字節表示而不是寫二進制數據。 它的所有Write(byte [])方法都在它使用的流上執行Write(),在本例中是FileStream。

在這種情況下,不確定你的“高效”是什么意思,但我會使用System.IO.File.WriteAllBytes(字符串路徑,byte []字節) - 就LOC而言當然是有效的。

也許System.IO.BinaryWriter和BinaryReader類會有所幫助。

http://msdn.microsoft.com/en-us/library/system.io.binarywriter.aspx

“將二進制中的原始類型寫入流並支持以特定編碼寫入字符串。”

http://msdn.microsoft.com/en-us/library/system.io.binaryreader.aspx

“將原始數據類型讀取為特定編碼中的二進制值。”

我有一個類似的問題,將300 MB Byte數組轉儲到磁盤文件...
我使用了StreamWriter ,它花了我30分鍾來轉儲文件。
使用FilePut花了我3-4分鍾,當我使用BinaryWriter時 ,文件被丟棄了50-60秒。
如果您使用BinaryWriter,您將獲得更好的性能。

實際上,最有效的方法是流式傳輸數據並在收到數據時進行編寫。 WCF支持流式傳輸,因此這可能是您想要查看的內容。 如果您使用大文件執行此操作,這一點尤其重要,因為您幾乎肯定不希望服務器和客戶端上的文件內容都在內存中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM