node.js基础学习--IO-对象映射(fs,Buffer)
来源:互联网 发布:ghost32软件详解 编辑:程序博客网 时间:2024/05/21 12:47
需求:最近项目中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:1O:b V:16844033O:c V:8447
总结:
1.js语言是若数据类型,对象的成员变量数据类型长度需要定义,不像java可以通过反射获取。遍历对象倒是很简单
2.node最多能读到UInt32,也就是无符号4字节,想读更多的内容需要自己去组装了。readDouble和readFloat分别是64和32位,但业务上不需要使用,用处不大
3.有哪些不足之处,欢迎指出
写文件,待续。。。
阅读全文
0 0
- node.js基础学习--IO-对象映射(fs,Buffer)
- Node.js中的Buffer对象
- JavaScript基础之Node.js与fs
- Node.js学习(10)----文件系统fs
- Node.js学习--基础知识(7)--fs
- Node.js学习之内置模块fs
- Node.js中Buffer对象注意细节
- node.js Buffer对象(模块详解)
- node.js中的全局对象Buffer
- node.js基础API(一):Buffer
- Node.js fs.Stats
- Node.js fs 模块
- Node.js文件系统fs
- Node.js 文件系统 fs
- node.js学习(十三、Buffer模块)
- node.js学习笔记之Buffer类
- 学习node.js(二)—— Buffer
- Node.js之文件及文件流(fs,path,buffer,stream)
- POJ 2031 ZOJ 1718 Building a Space Station
- 数据库基础定义
- XListView下拉刷新,上拉加载和ListView多条目加载
- div宽高监控
- CABasicAnimation的使用方法(移动,旋转,缩放)
- node.js基础学习--IO-对象映射(fs,Buffer)
- 第一章:pip 安装 tar.gz 结尾的文件 和 .whl 结尾的文件
- Android开源库V
- 中西方的信仰差异
- VB.NET在WinCE5.0中异常转储试验
- Java 集合系列07之 Stack源码解析
- 算法复习:栈的压入、弹出序列
- python2.7版本链接MySQL数据库
- 【高效生活】IDEA与JRebel