最近公司 Java 项目中有用到 protobuf,查了些资料还是一脸迷茫。主要纳闷这玩意到底有啥用呢?直接自己写 class、interface 不是更方便,还需要先写个 .proto 文件编译成 java 文件再来调用,这不是脱了裤子放屁吗? Protocal Buffers(简称protobuf)是谷歌开源的一种数据传输协议,类似于 XML、JSON 等技术,
-- protobuf 支持 Java 核心包--> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.15.3</version> </dependency> <!-- proto 与 Json 互转会用到--> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java-util<...
tips: serialVersionUID 有两种显示的生成方式:一是默认的 1L,比如: private static final long serialVersionUID = 1L; 二是根据类名、接口名、成员方法及属性等来生成一个 64 位的哈希字段,当实现 java.io.Serializable 接口的类没有显式地定义一个 serialVersionUID 变量时候, Java 序列化机制会根据编译的 C...
protoc --java_out=./output example.proto 1. 这会在./output目录下生成相应的 Java 类文件。 在Java 项目中使用 Protobuf 接下来,我们详细介绍如何在 Java 项目中使用 Protobuf。 IDEA环境准备 安装插件 添加依赖 在你的 Java 项目中添加 Protobuf 的依赖。对于 Maven 项目,可以在pom.xml中添加以下依赖: <...
这对于跨平台、跨语言间的通信、数据持久化等场景都至关重要。Google的Protobuf(Protocol Buffers)是一种高效、跨语言的数据序列化库,它能够将结构化的数据序列化,以便于网络传输或者进行数据存储。在Java环境中,我们可以使用Protobuf来处理这类任务。特别是在Prompt Java这个平台中,Java Protobuf的使用显得更为重要。
也就是执行proto.exe --java_out = / Person.proto就会编译成功。 4、使用class类文件 上面意味着我们已经做好了序列化的准备工作,接下来我们就可以直接使用这个类了。 (1)第一步:将生成的PersonProto类引入到我们的IDEA或者是eclipse中。 (2)第二步:在idea或者是eclipse添加protobuf的依赖。 (3)第三步:使用...
运行protobuf 编译器protoc生成对应语言的代码,如 java 会生成 .java 文件(每个消息对应一个类,同时还有一个特殊的Builder类用于创建消息接口) 通过protobuf API 来读写消息 .protot 文件模板: // 使用 proto3 语法,未指定则使用 proto2syntax="proto3";// 生成 proto 文件所在包名optionjava_package="cn.cafe...
我们知道数据在网络传输中是以二进制进行的,一般我们使用字节byte来表示, 一个byte是8bits,如果要在网络上中传输对象,一般需要将对象序列化,序列化的目的就是将对象转换成byte数组在网络中传输,当接收方接收到byte数组之后,再对byte数组进行反序列化,最终转换成java中的对象。 那么将java对象序列化可能会有如下几种...
在Java种对不同类型的选择,其他的类型区别很明显,主要在与int32、uint32、sint32、fixed32中以及对应的64位版本的选择,因为在Java中这些类型都用int(long)来表达,但是protobuf内部使用ZigZag编码方式来处理多余的符号问题,但是在编译生成的代码中并没有验证逻辑,比如uint的字段不能传入负数之类的。而从编码效率上,对...
我ide是idea的,安装了两个插件,GenProtobuf是用来生成java文件的,Protobuf Support是用来高亮、语法检查等。 GEnProtobuf设置,打开菜单: 设置protoc.exe的路径,以及生成的文件路径 在idea点击.proto文件,右键,选择quick gen protobuf rules,就可以在我们指定的地方生成java文件,如果选择quick gen protobuf here就会在...