在c#中将字节流写入文件的有效方法是什么?

时间:2015-10-20 05:20:34

标签: c#

我在 5GB 周围的字节形式有大数据。

我需要将此数据存储在文件$scope.annotations = $scope.dashboard.annotations.list; var isCheckedCritical = false; var isCheckedMinor = false; var isCheckedMajor = false; var isCheckedWarning = false; _.map($scope.annotations, function(obj) { if(obj.name === 'Warning') { isCheckedWarning = true; } if(obj.name === 'Major') { isCheckedMajor = true; } if(obj.name === 'Minor') { isCheckedMinor = true; } if(obj.name === 'Critical') { isCheckedCritical = true; } }); $scope.annotation = { critical : isCheckedCritical, warning : isCheckedWarning, minor : isCheckedMinor, major : isCheckedMajor }; 中。首先应将此数据转换为字符串,然后将其保存到文件中,以便我们可以对该文件执行操作。

我使用下面的代码将字节流转换为字符串,然后将其保存在文件中。

ServerData.xml

这是正确的方法吗?

或者请提出更好的方法,以便将来不会有任何内存问题?

4 个答案:

答案 0 :(得分:1)

您可以使用SELECT cakename, cakeid, (price/slice) as col1 FROM CakeTable order by col1 desc 简单地将这些字节写入文件:

FileStream

更新:如果您没有足够的资源,您将无法使用如此大的XML文档。我建议重新格式化这个文件。例如,我将解析此XML并将数据插入SQL数据库。然后,您可以轻松地使用大量数据进行操作。

答案 1 :(得分:1)

如果始终使用在代码点边界处断开的UTF-8编码文本调用XmlReader,则问题中的代码才有效。这对我来说似乎不太可能,所以我希望你在解码到文本时会遇到错误。

然而,解码到文本然后写作,是相当无意义的,而且确实适得其反。字节已经是UTF-8编码的。当它们从套接字到达时直接将它们写入文件。不要对它们进行任何处理。当您使用Hashmap来阅读XML时,解析器将从文档的XML声明中读取编码为UTF-8,并能够解码文档的其余部分。我假设文档的XML声明指定了UTF-8,但这似乎很有可能。你应该检查一下。

你应该摆脱写入字节对你没用的文本编写器。将字节直接写入文件流。并尝试避免重复打开和关闭文件。这效率非常低。只打开和关闭文件一次。

答案 2 :(得分:0)

为什么需要将其转换为字符串?

using System.IO;

public static void WriteBytes(byte[] bytes, string filename)
{
    using (FileStream fs = new FileStream(filename, FileMode.OpenOrCreate))
    using (BinaryWriter writer = new BinaryWriter(fs, Encoding.UTF8))
    {
        writer.Write(bytes);
    }
}

答案 3 :(得分:0)

我希望将所有字节写入文件。在阅读时,将其转换为字符串,然后使用XDocument,XElement等转换为XML。通过在文件中写入字节,您将节省空间,并且效率很高,

我不喜欢使用FileStream,而是选择File.WriteAllBytes方法。

private const string fileName = "ServerData.xml";
public void ProcessBuffer(byte[] receiveBuffer, int bytes)
{
    File.WriteAllBytes(filename, bytes);


    // And when reading
    var bytes = File.ReadAllBytes(filename);
    var binaryReader = new BinaryReader(new MemoryStream(bytes));
    // Parse strings and make xml,
    binaryReader.ReadString();

}