NodeJs环境下对Protobuf的序列化与反序列化

简介: 关于Protobuf的介绍,这里不过多叙述,只介绍NodeJs环境下对Protobuf的使用

Protobuf官方有提供JS环境下的使用,详见官方文档
但是由于这种方式,无法直接获得一个纯粹的数据JS对象,字段数据需要通过Get、Set修改,我希望能直接将JS对象序列化成字节流直接将字节流反序列化为JS对象,因此选择使用第三方的插件protobufjs

环境安装

直接通过npm安装即可

npm install protobufjs

Protobuf文件的编译

这里等同于官方通过protoc.exe编译得到的pb文件,在protobufjs中,是通过pbjs编译得到一个Json文件

node ./node_modules/protobufjs/bin/pbjs [*.proto] > [*.json]

示例

Protobuf文件 - http.proto

syntax = "proto2";

message Phone {
    required string name = 1;
    optional int64 phonenumber = 2;
}
message Person {
    required string name = 1;
    required int32 age = 2;
    optional string address = 3;
    repeated Phone contacts = 4;
}

通过pbjs编译获得Json文件 - http_pb.json

node ./node_modules/protobufjs/bin/pbjs http.proto > http_pb.json

调用方式

let protobufjs = require("protobufjs");

let json = require("./http_pb.json")
let root = protobufjs.Root.fromJSON(json)
let message = root.lookupType("Person");

// 序列化
let data = { name: "胡汉三", age: 43, contacts: [{ name: "小马哥", phonenumber: 13666556565 }, { name: "小马哥", phonenumber: 13666556566 }] };
let buff = message.encode(message.create(data)).finish();

console.log("序列化 >>", buff);
// 反序列化
data = message.decode(buff);

console.log("反序列化 >>", data);

相关文章
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
196 1
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
223 1
|
3月前
|
XML JSON 编解码
从JSON到Protobuf,深入序列化方案的选型与原理
序列化是数据跨边界传输的“翻译官”,将结构化数据转为二进制流。JSON可读性强但冗余大,Protobuf高效紧凑、性能优越,成主流选择。不同场景需权衡标准化与定制优化,选最合适方案。
318 3
|
6月前
|
存储 Java 编译器
说一说关于序列化/反序列化中的细节问题
我是小假 期待与你的下一次相遇 ~
125 1
|
6月前
|
JSON Java 数据库连接
|
7月前
|
存储 安全 IDE
说一说序列化与反序列化中存在的问题
本文详细解析了Java中的序列化机制,包括序列化的概念、实现方式及应用场景。通过Student类的实例演示了对象的序列化与反序列化过程,并分析了`Serializable`接口的作用以及`serialVersionUID`的重要意义。此外,文章还探讨了如何通过自定义`readObject()`方法增强序列化的安全性,以及解决可序列化单例模式中可能产生的多实例问题。最后提供了代码示例和运行结果,帮助读者深入理解序列化的原理与实践技巧。
186 2
|
7月前
|
JSON JavaScript 前端开发
Go语言JSON 序列化与反序列化 -《Go语言实战指南》
本文介绍了 Go 语言中使用 `encoding/json` 包实现 JSON 与数据结构之间的转换。内容涵盖序列化(`Marshal`)和反序列化(`Unmarshal`),包括基本示例、结构体字段标签的使用、控制字段行为的标签(如 `omitempty` 和 `-`)、处理 `map` 和切片、嵌套结构体序列化、反序列化未知结构(使用 `map[string]interface{}`)以及 JSON 数组的解析。最后通过表格总结了序列化与反序列化的方法及类型要求,帮助开发者快速掌握 JSON 数据处理技巧。
|
Web App开发 JavaScript 前端开发
|
5月前
|
JavaScript Unix Linux
nvm与node.js的安装指南
通过以上步骤,你可以在各种操作系统上成功安装NVM和Node.js,从而在不同的项目中灵活切换Node.js版本。这种灵活性对于管理不同项目的环境依赖而言是非常重要的。
1208 11
|
10月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。