2014-12-03 32 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