最简单的方法是用fs的writeFileSync和readFileSync如下所示:
var fs = require('fs');
var crypto = require('crypto');
//产生32位随机字节
var wbuf = crypto.randomBytes(32);
console.log(wbuf);
try {
//把32位随机字节写到文件"binaryfile"
fs.writeFileSync("binaryfile", wbuf);
//读取文件"binaryfile"
var rbuf = fs.readFileSync("binaryfile");
console.log(rbuf);
} catch(err) {
console.log(err);
}
从输出可以看到,随机产生的32位字节被完整的写入文件又读取回来。
另外还有一种用字节流的方法:
var fs = require('fs');
function writeBinary(filename, buf, callback) {
var wstream = fs.createWriteStream(filename);
wstream.write(buf);
wstream.end();
wstream.on('finish', function() {
callback();
});
wstream.on('error', function(err) {
callback(err);
});
}
function readBinary(filename, callback) {
var rstream = fs.createReadStream(filename);
var chunks = [];
var size = 0;
rstream.on('readable', function() {
var chunk = rstream.read();
if (chunk != null) {
chunks.push(chunk);
size += chunk.length;
}
});
rstream.on('end', function() {
callback(null, Buffer.concat(chunks, size));
});
rstream.on('error', function(err) {
callback(err, null);
});
}
var crypto = require('crypto');
var wbuf = crypto.randomBytes(32);
console.log(wbuf);
writeBinary("binaryfile", wbuf, function(err) {
if (err) {
console.log(err);
return;
}
readBinary("binaryfile", function(err, rbuf) {
if (err) {
console.log(err);
} else {
console.log(rbuf);
}
});
});
上面两种方法执行效果是一样的,暂时没有发现有什么差别。