node.js基础学习--IO-对象映射(fs,Buffer)

需求:最近项目中xdr文件(交易文件等)decode和encode是用的是java语言,djrpc-djrpc_hack.jar第三方工具。想试试前端技术来读二进制文件,转化为对象。

代码:

const fs = require('fs');

//对象的结构需要预定义,变量名:[长度,值]
var obj = {
    a: [4, 0],
    b: [4, 0],
    c: [2, 0]
}

//异步
// fs.readFile('01_01010501_20170717101101_000001.01', (err, data) => {
//     if (err) throw err;
//     console.log(data);
//     for (var o in obj) {
//
//         obj[o][1] = data.readInt32BE(obj[o][0]);
//
//         console.log('O:' + o + ' V:' + obj[o][1]);
//     }
// });

//同步
var bf = fs.readFileSync('01_01010501_20170717101101_000001.01');

console.log(bf);

var pos = 0;

for (var o in obj) {

    obj[o][1] = readXbytes(obj[o][0]);

    console.log('O:' + o + ' V:' + obj[o][1]);

    // pos+=obj[o][0];
}

function readXbytes(len) {

    var value = 0;

    switch (len) {
        case 1 :
            value = bf.readUInt8(pos);
            break;
        case 2 :
            value = bf.readUInt16BE(pos);
            break;
        case 4 :
            value = bf.readUInt32BE(pos);
            break;

        default :

            break;
    }

    pos += len;

    return value;
}

结果:

<Buffer 00 00 00 01 01 01 05 01 20 ff 4a 42 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 20 ff 49 b5 00 00 19 07 01 01 05 01 00 00 00 00 00 00 ... >
O:a V:1
O:b V:16844033
O:c V:8447

总结:
1.js语言是若数据类型,对象的成员变量数据类型长度需要定义,不像java可以通过反射获取。遍历对象倒是很简单
2.node最多能读到UInt32,也就是无符号4字节,想读更多的内容需要自己去组装了。readDouble和readFloat分别是64和32位,但业务上不需要使用,用处不大
3.有哪些不足之处,欢迎指出

写文件,待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值