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("[email protected]")
                .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?	[email protected]"

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


你可能感兴趣的:(protobuf的基本使用(读取和写入)——java)