protobuf javaのインストールと使用

4530 ワード

インストール
https://blog.csdn.net/warrially/article/details/52683611 protobuf-java-3.0.0.tar.gz解凍をダウンロード
コンパイルインストール./configure--prefix=/home/protobuf make sudo make install
使用
まず任意のフォルダの下にxxx.protoファイルを作成します.以下の通りです.protoTest.proto
syntax = "proto3";

message testBean {
	int64 id = 1;
	string name = 2;
}

インストールディレクトリのbinディレクトリに入り、次のコマンドを実行してJavaファイルを生成します:(ここでは/home/protobufにインストールしました)
./protoc -I=/home/pzs/protobuf/protofile --java_out=/home/pzs/protobuf/javaclass /home/pzs/protobuf/protofile/test.proto

説明:
  • 第1パス/home/pzs/protobuf/protofileはtest.protoファイルを格納する親ディレクトリである.
  • .
  • 第2パス/home/pzs/protobuf/javaclassはjavaを生成するファイル格納アドレスである.
  • .
  • 第3のパス/home/pzs/protobuf/protofile/protoTest.protoは完了したprotoファイルパスです.(第1および第3のパス宣言は冗長ではありませんか?)
  • 上記の操作が完了すると、protobufは/home/pzs/protobuf/javaclassパスの下でProtoTest.javaファイルを自動的に生成することがわかる.
    この自動生成されたProtoTest.javaはどのような機能を提供していますか?
    注意:ProtoTest.javaを使用するには、mavenに次の依存を追加します.
        
          com.google.protobuf
          protobuf-java
          3.5.0
        
    
  • set,get機能.
  •         ProtoTest.testBean.Builder protoTest_builder = ProtoTest.testBean.newBuilder();
            protoTest_builder.setId(10000);
            protoTest_builder.setName("huxinyi");
            System.out.println(protoTest_builder.getId());
            System.out.println(protoTest_builder.getName());
    
  • シーケンス化と逆シーケンス化機能.
  •         ProtoTest.testBean.Builder protoTest_builder = ProtoTest.testBean.newBuilder();
            protoTest_builder.setId(10000);
            protoTest_builder.setName("huxinyi");
            System.out.println(protoTest_builder.getId());
            System.out.println(protoTest_builder.getName());
    
            ProtoTest.testBean serialization = protoTest_builder.build();
            ProtoTest.testBean deserialization = ProtoTest.testBean.parseFrom(serialization.toByteArray());
            System.out.println(serialization.getId());
            System.out.println(serialization.getName());
    

    あるいは、シーケンス化されたデータをファイルに保存します.
            ProtoTest.testBean.Builder protoTest_builder = ProtoTest.testBean.newBuilder();
            protoTest_builder.setId(10000);
            protoTest_builder.setName("huxinyi");
            System.out.println(protoTest_builder.getId());
            System.out.println(protoTest_builder.getName());
    
            ProtoTest.testBean serialization = protoTest_builder.build();
            ProtoTest.testBean deserialization = null;
            OutputStream os = new FileOutputStream(new File("/home/pzs/protobuf/serializationFile"));
            FileInputStream fis = new FileInputStream(new File("/home/pzs/protobuf/serializationFile"));
            serialization.writeTo(os);
            deserialization = ProtoTest.testBean.parseFrom(fis);
            System.out.println(deserialization.getId());
            System.out.println(deserialization.getName());
    
  • protobufとjsonの相互変換
  • JsonFormatを使用し、mavenに依存サポートを追加する必要があります.
    
          com.google.protobuf
          protobuf-java-util
          3.0.0
        
    

    protobuf回転json
            ProtoTest.testBean.Builder protoTest_builder = ProtoTest.testBean.newBuilder();
            protoTest_builder.setId(10000);
            protoTest_builder.setName("huxinyi");
            
            String js = JsonFormat.printer().print(protoTest_builder);
            System.out.println(js);
    

    json転送protobuf(マージ操作のように)
            ProtoTest.testBean.Builder protoTest_builder = ProtoTest.testBean.newBuilder();
            ProtoTest.testBean.Builder formjson_build = ProtoTest.testBean.newBuilder();
            protoTest_builder.setId(10000);
            protoTest_builder.setName("husin");
            
            String js = JsonFormat.printer().print(protoTest_builder);
            System.out.println(js);
            
            JsonFormat.Parser parser = JsonFormat.parser();
            parser.merge(js,formjson_build);
            System.out.println(formjson_build.getId());
            System.out.println(formjson_build.getName());
    

    まとめ
    Protocol buffersは、構造化データをシーケンス化するための柔軟で効率的で自動化されたプロトコルであり、データを構造化、シーケンス化した後、データの理解、伝送、記憶に有利である.
    Protocol buffersデータ構造は、タイプのネストを許可し、jsonと同じように強力になります.
    Protocol buffersがサポートするデータ型:データ型ここではProtobufがサポートする基本データ型のテーブルを見ることができます.