2016-09-29 63 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,因爲建議比兩者都快,並且不要在每次迭代中打開文件:) –