【问题标题】: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)...?

标签: javascript node.js file multidimensional-array nodes


【解决方案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,建议比两者都快,并且不要在每次迭代中打开文件:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-21
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多