本文主要参考:
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文件工程经过编译后会出现错误。
可以看一下输出的文件中的内容:
John Doe?jdoe@example.com"这文件里面的数据是通过编码后得到的。