7

学习笔记-Protobuf快速入门

 2 years ago
source link: https://mikeygithub.github.io/2021/11/25/yuque/nh44si/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
学习笔记-Protobuf快速入门 - 麦奇

学习笔记-P_

Mikey 2021年11月25日 下午

380 字

5 分钟

8 次

protocol 是谷歌的语言中立、平台中立、可扩展的结构化数据序列化机制——比 XML,但更小、更快、更简单。您可以一次定义数据的结构化方式,然后可以使用特殊生成的源代码轻松地使用各种语言在各种数据流中写入和读取结构化数据。

1.下载 protoc:下载地址

选择对应的版本,下载后将 bin 目录加入系统环境变量中

2.编写.protoc 文件

syntax = "proto2";
option java_generic_services = true;
option java_package = "io.demo.proto";
option java_outer_classname = "ProtoUser";

message User {
required int32 id = 1;
optional string name = 2;
optional string mail = 3;
}

3.生成 Java 文件

protoc --java_out=../java user.proto

4.引入依赖

<dependencies>
<!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java -->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.17.3</version>
</dependency>
</dependencies>

5.测试序列化和发序列化

public class UserTest {
public static void main(String[] args) {
ProtoUser.User user = ProtoUser.User.newBuilder()
.setId(1)
.setName("麦奇")
.setMail("[email protected]").build();
System.out.println(user);

byte[] bytes = user.toByteArray();
try {
ProtoUser.User parseFrom = ProtoUser.User.parseFrom(bytes);
System.out.println(parseFrom);
}catch (Exception e){
e.printStackTrace();
}
}
}

protoman:一款 http 上 protobuf 的 API 客户端

官网:http://www.electronjs.org/apps/protoman

添加对应的 proto 文件即可进行发送请求,其 Content-Type 设置为 application/x-protobuf

java 教程:https://developers.google.com/protocol-buffers/docs/javatutorial
java 代码生成:https://developers.google.com/protocol-buffers/docs/reference/java-generated


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK