大家在用node解释或者封装二进制数据时,一般怎么样可以便捷一点?
发布于 2 个月前 作者 p2227 432 次浏览 来自 问答

情景是这样的,现在有一个二进制的协议,要写程序实现这个协议的转化

一种转化是输入buffer流,输出js对象,一般叫“Parse”,我叫这个做“解释” 另外一种转化是输入一个js对象,输出buffer流,英文好像叫“Stream”,我叫“封装”,但总感觉有更好的叫法

然后大家觉得怎么做这些操作可以便捷一点?例如用这个库?https://github.com/substack/node-binary 或者其他更加好的模式?

或者一般用什么样关键字去搜索?

9 回复

你可能需要protobuf、bson、MessagePack 关键词serialize 这里有个benchmark https://github.com/sqfasd/node-serialization-benchmark

@qingfeng 据我所知,protobuf的使用情景是这样的,前端和后端约定一种基于文本的传输格式,然后中间经过protobuf,传输的时候会是一种二进制,比文本要小。 而我现在的情景是,中间传输的二进制格式是固定的,比例你要自己写一个tcp的客户端,那些头是固定下来的了。不知道protobuf和其他你介绍的工具有无这种情景呢?

@p2227 protobuf与文本没有关系,它就是一种数据交换的格式,不需要你去做各种parse和pack,你先定义好数据结构,拿到二进制数据之后,直接unserialize成对象,或者有了对象,直接serialize成二进制数据。 只要你的二进制数据能映射成一个数据结构,就可以用protobuf,省了你自己一个一个解析和赋值 有一种情况除外,就是你的二进制数据是超长的数据流,不可能全放在内存中,那就只能使用流的形式,收一点处理一点了

在java叫序列化和反序列化,现在一般用xml或者json,作为中间文本传输,protobuf也是一样的东西,为什么用自己发明一种格式

我之前参加过一个项目,其中涉及到了,在浏览器 解析一个 定制格式 的 二进制流(描述的是3D地图信息,最后使用WebGL进行渲染) 并且 输出POJO对象。当时,我就直接使用ArrayBuffer + DataVaiew一个字节一个字节进行分析的。

@qingfeng 好的,那我按照你的思路再研究一下

@stuartZhang 你这个说的是在浏览器上吗?

我这边正在做的一个项目是把16进制的Buffer转成js对象, 然后把js对象转成16进制的Buffer, 就是直接按照协议定义的, 一个个读的, 没有用任何第三方的包, 因为感觉自己定义的协议, 用第三方的, 可能不能适应你所有的场景

@liujavamail 嗯,这几天我自己的写代码的时候也大概总结了一下,或许协议中有一些简单的可以做,但一些复杂的确实很难用到第三方。

回到顶部