2014-12-03 44 views
0

我想使用01位值創建一個二進制文件,然後我想逐一讀取它們。如何通過NodeJS在文件中逐個寫入和讀取位?

我該怎麼做?

對於寫作我想:該文件存在

var out = require("fs").createWriteStream("./out"); 
out.write(new Buffer("0")); // this writes "0" as string 
out.write(new Buffer(["0"])); // this creates something strange, 
           // but I'm not sure it's the needed thing 

後,我想從該文件中所有迭代位:

require("fs").readFile("./out", function (err, buff) { 
    // how to access here `0` and `1` values? 
}); 

什麼是這樣做的正確方法?

+0

你能解釋一下嗎?你想要做什麼?如果某個流確實是您想要的,那麼可以創建一個轉換流,但這並不明確。否則,您將不得不讀取/寫入字節值並使用位掩碼來獲取所需的值。 – Brad 2014-12-03 19:23:10

+0

@Brad從我在其他文章中看到的按字節讀取的內容可以使用'stream.on(「byte」,...)'來實現,這就是我實際需要的東西。我正在爲ARC機器編寫一個彙編程序和一個解釋器應用程序。爲此,我需要將二進制文件(32位)存儲在二進制文件中,然後解釋它們,但首先我需要將它們正確寫入,最後正確讀取並處理它們。 – 2014-12-03 19:28:55

+0

你想要字節還是32位整數?緩衝區類允許您讀取/寫入緩衝區中的各種值。 – Brad 2014-12-03 19:29:57

回答

2

緩衝器在字節級操作。一旦你訪問了一個特定的字節(例如buff[0]),它只是一個普通的javascript數字,所以你可以對這個數字進行任何操作(例如buff[0] & 0x0F)。

緩衝區對象上有convenience functions也允許你寫不同種類的數字。例如:buff.writeUInt32BE(5, 0)將在緩衝區的位置0處以大端模式寫入一個32位無符號整數5。在位置0處讀取大端模式下的32位無符號整數:buff.readUInt32BE(0)

+0

因此,有以下字符串:「11000010000000000010100000010100」我該如何寫入二進制格式的文件(然後讀取)?我應該做'新的緩衝區(str.split(「」)。map(function(c){return parseInt(c);}))'? – 2014-12-03 19:34:45

+0

這是一個32位整數,所以最簡單的方法可能是:var buf = new Buffer(4); buf.writeUInt32BE(parseInt(str,2),0);'。然後在任何地方使用'buf'。要將該數字寫入文件,您可以執行如下操作:'fs.writeFileSync('foo.dat',buf);' – mscdex 2014-12-03 20:23:02