Nodejs: 读写二进制文件

 最简单的方法是用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);
                }

        });

});

上面两种方法执行效果是一样的,暂时没有发现有什么差别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值