protobuf的基本使用(读取和写入)——java

本文主要参考:
protobuf官方文档。
好,下面上货。我们这里说的是如何使用protobuf。首先protobuf提供了一个约定——.proto文件。然后约定好的双方都通过这种格式进行对数据进行处理即可。
下面是使用的一个例子:

1、添加maven依赖 com.google.protobuf protobuf-java 3.5.1 2、通过.proto文件编译出对应的java类文件(可以参考这里:https://blog.csdn.net/wild46cat/article/details/80739888)。
3、首先是把protobuf格式的类进行编码。

package com.example.demo; import com.example.demo.proto.AddressBookProtos; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; public class ProtoWrite { public static Logger logger = LoggerFactory.getLogger("ProtoWrite"); public static void main(String[] args) { AddressBookProtos.Person cat = AddressBookProtos.Person.newBuilder().setId(1234) .setName("John Doe") .setEmail("jdoe@example.com") .addPhones( AddressBookProtos.Person.PhoneNumber.newBuilder() .setNumber("555-4321") .setType(AddressBookProtos.Person.PhoneType.HOME)) .build(); System.out.println(cat); System.out.println("-=============-"); try { System.out.println(cat.toByteArray()); System.out.println("-=============-"); cat.writeTo(System.out); System.out.println("-=============-"); cat.writeTo(new FileOutputStream("C:\\Users\\admin\\Desktop\\22.txt")); } catch (IOException e) { e.printStackTrace(); } finally { } } }

4、然后是读取的过程
package com.example.demo; import com.example.demo.proto.AddressBookProtos; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class ProtoRead { public static Logger logger = LoggerFactory.getLogger("ProtoRead"); public static void main(String[] args) { try { AddressBookProtos.Person person= AddressBookProtos.Person.parseFrom(new FileInputStream("C:\\Users\\admin\\Desktop\\22.txt")); System.out.println(person); } catch (IOException e1) { e1.printStackTrace(); } finally { } } }

5、注意,在java工程中maven的porotobuf的版本需要和protoc的版本保持一致,不然.proto文件工程经过编译后会出现错误。
【protobuf的基本使用(读取和写入)——java】

可以看一下输出的文件中的内容:
John Doe? jdoe@example.com"

这文件里面的数据是通过编码后得到的。


    推荐阅读