我在 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
这是正确的方法吗?
或者请提出更好的方法,以便将来不会有任何内存问题?
答案 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();
}