在C#中,将字节数组另存为磁盘上的文件的最有效方法是什么?
非常简单的场景。我有一个Web服务,该服务接收要保存为磁盘上特定文件类型的字节数组。在C#中最有效的方法是什么?
解决方案
那就是File.WriteAllBytes()
。
System.IO.File.WriteAllBytes(path,data)
应该很好。
不知道在这种情况下"有效"是什么意思,但是我将使用System.IO.File.WriteAllBytes(string path,byte [] bytes)就LOC而言肯定有效。
也许System.IO.BinaryWriter和BinaryReader类会有所帮助。
http://msdn.microsoft.com/en-us/library/system.io.binarywriter.aspx
"将二进制类型的原始类型写入流中,并支持以特定编码写入字符串。"
http://msdn.microsoft.com/zh-CN/library/system.io.binaryreader.aspx
"将原始数据类型读取为特定编码中的二进制值。"
将300 MB字节数组转储到磁盘文件时,我遇到了类似的问题...
我使用了StreamWriter,并且花了30分钟的时间来转储文件。
使用FilePut花了我大约3-4分钟的时间,而当我使用BinaryWriter时,文件在50-60秒内被转储了。
如果使用BinaryWriter,则性能会更好。
实际上,最有效的方法是流式传输数据并在接收到数据时将其写入。 WCF支持流式传输,因此我们可能需要研究一下。如果我们要处理大文件,这尤其重要,因为几乎可以肯定,服务器和客户端上的文件内容都不在内存中。
而WriteAllBytes只是执行
using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read)) { stream.Write(bytes, 0, bytes.Length); }
BinaryWriter的名称具有误导性,它旨在以字节表示形式编写基元,而不是编写二进制数据。它的所有Write(byte [])方法所做的就是对其使用的流(在本例中为FileStream)执行Write()。