2016-09-29 29 views
1

我制作了var QL = [[],[],[],[]];的数组,其大小为[100][20][100][3],我需要在每次程序结束时以及程序再次启动时保存阵列IF该文件存在,则只需加载。 问题如何快速将文件保存到文件上?

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); 
    } 
});} 
+0

'JSON.stringify(QL)','然后JSON.parse(fileContents) '...? –

回答

0

这一翻译你写在批处理文件时,一个解决方案是附加文件中的每个迭代中,使用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); 
        } 
       }); 
      } 
     } 
    } 
} 
+0

这会花费为每次迭代打开文件描述符,这意味着听起来最糟糕。 – a0viedo

+0

@ a0viedo,我同意你的看法,但是我提出了一个解决方案来追加循环的执行时间,而不是批量执行。现在搜索,我看到这个:https://www.npmjs.com/package/append-stream,因为建议比两者都快,并且不要在每次迭代中打开文件:) –