如何快速将数组保存在文件中?
Posted
技术标签:
【中文标题】如何快速将数组保存在文件中?【英文标题】:How to save array on file fast? 【发布时间】:2017-02-08 03:02:42 【问题描述】:我创建了数组var QL = [[],[],[],[]];
,大小为[100][20][100][3]
,每次我的程序完成和程序再次启动时,我都需要保存数组如果文件存在,然后加载。
问题
1- 怎么这么快(我的代码在下面,但是很慢!)?
2 - 如何快速加载?
QLearn.QLSave = function ()
var jsonQtable = [];
for (var a=0; a<100; a++)
for (var b=0; b<20; b++)
for (var c=0; c<100; c++)
for (var d=0; d<2; d++)
jsonQtable.push(QL[a,b,c,d].toJSON)
QLearn.ui.logger.log('Saving QL...');
var dir = './Qtable';
var fileName = dir + '/QL'+'.json';
fs.writeFile(fileName, JSON.stringify(jsonQtable), function (err)
if (err)
QLearn.ui.logger.log('Failed to save! '+err);
else
QLearn.ui.logger.log('Saved to '+fileName);
);
【问题讨论】:
JSON.stringify(QL)
,然后是JSON.parse(fileContents)
...?
【参考方案1】:
如果您批量编写文件,解决方案是在每次迭代中追加文件,使用fs.appendFile:
QLearn.QLSave = function ()
var jsonQtable = [];
for (var a=0; a<100; a++)
for (var b=0; b<20; b++)
for (var c=0; c<100; c++)
for (var d=0; d<2; d++)
fs.appendFile(fileName, QL[a,b,c,d].toJSON, function (err)
if (!err)
console.log("Success in insert: " + QL[a,b,c,d].toJSON);
);
【讨论】:
每次迭代都需要打开一个文件描述符,这意味着这听起来最糟糕。 @a0viedo,我同意你的观点,但我提出了一个解决方案,用于追加循环的执行时间,而不是批量。现在搜索,我看到了这个:npmjs.com/package/append-stream,建议比两者都快,并且不要在每次迭代中打开文件:)以上是关于如何快速将数组保存在文件中?的主要内容,如果未能解决你的问题,请参考以下文章