2020-10-21 protobuf+java base64

it2024-04-21  62

1、github下载protobuf编译器:

https://github.com/protocolbuffers/protobuf/releases windows64位选择 “protoc-版本号-win64.zip”

2、解压。

3、编写.proto文件,如FirstDemo.proto:

syntax = "proto2"; message Person { optional int32 id = 1; optional string name = 2; optional string email = 3; }

4、生成java文件

放在解压后的bin中,与protoc.exe同级目录。在此目录中命令行运行protoc.exe --java_out=./ FirstDemo.proto。 这个命令的原型是protoc.exe --语言_out=输出路径 proto文件名,注意输出路径和proto文件名之间的空格。 会在输出路径中输出与.proto同名的FirstDemo.java文件。

5、IntelliJ中的配置

新建工程,工程中目录下的pom.xml的project标签中加入以下配置。注意版本号与步骤1中的编译器版本写一致。

<dependencies> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.13.0</version> </dependency> </dependencies>

demo

helloworld.java:

import com.google.protobuf.InvalidProtocolBufferException; import protobuf.FirstDemo; public class helloworld { public static void main(String[] args) throws InvalidProtocolBufferException { // FirstDemo.Person.Builder builder = FirstDemo.Person.newBuilder(); // 设置字段值 builder.setId(1); builder.setName("alice"); builder.setEmail("alice@abc.com"); // 实例化 FirstDemo.Person person = builder.build(); System.out.println(person.toString()); // 序列化 System.out.println("=================="); byte[] byteArray = person.toByteArray(); for (byte b : byteArray) { System.out.print(b); } System.out.println(); System.out.println("================"); // 反序列化 FirstDemo.Person p2 = FirstDemo.Person.parseFrom(byteArray); System.out.println("id:" + p2.getId()); System.out.println("name:" + p2.getName()); System.out.println("email:" + p2.getEmail()); } }

将步骤4中生成的FirestDemo.java放在名为protobuf(随便起的名)的包(文件夹)中,在helloworld.java中引入这个包。


扩展 :base64编码

为什么要编码:特殊字符不能直接在网络上传输。平时浏览器发送http的get或者post请求也是要对url或者内容进行编码解码的,否则传输过程会由于不认识里边的特殊字符导致出错。base64是编码的一种方式。

严格来说base64不能算是一种加密,只能说是编码转换。使用base64的初衷。是为了方便把含有不可见字符串的信息用可见字符串表示出来。

java8以上自带了编解码器。 import java.util.Base64;

// 使用基本编码 String base64encodedString = Base64.getEncoder().encodeToString(byteArray); System.out.println("Base64 编码字符串 (基本) :" + base64encodedString); // 解码 byte[] base64decodedBytes = Base64.getDecoder().decode(base64encodedString);

base64有三种编码方式: https://www.runoob.com/java/java8-base64.html 基本:输出被映射到一组字符A-Za-z0-9+/,编码不添加任何行标,输出的解码仅支持A-Za-z0-9+/。 URL:输出映射到一组字符A-Za-z0-9+_,输出是URL和文件。 MIME:输出隐射到MIME友好格式。输出每行不超过76字符,并且使用’\r’并跟随’\n’作为分割。编码输出最后没有行分割。

最新回复(0)