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);
                }

        });

});

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

猜你喜欢

转载自blog.csdn.net/pengpengzhou/article/details/108863377