Use of Protobuf

Google Protocol Buffer (Protobuf for short) is a lightweight and efficient structured data storage format that is platform-independent, language-independent, and extensible, and can be used in communication protocols and data storage fields.

Framework git address: https://github.com/google/protobuf

 

Protobuf message definition:

syntax="proto2"; //Compiler version: proto2, proto3
package com.seasy.proto; // package name

import "article.proto"; //Import other proto files

message PrintDatamatrix{
	required string title = 1;
	required int32 width = 2 [default=100];
	required int32 height = 3 [default=100];
	required bytes bitmap = 4;
	optional string file_path = 5;

	enum PhoneType{ //The enumeration value must be an integer greater than or equal to 0
        MOBILE = 0;  
        HOME = 1;  
        WORK = 2;  
    }

	message PhoneNumber{  
        optional string number = 1;  
        required PhoneType type = 2 [default=WORK];   
    }

	repeated PhoneNumber phone = 6;
	repeated int32 article_numberofwords = 7 [packed=true]; //packed can only be used for fields of repeated numeric type, making it more efficient to encode
	required float price = 8;
	map<string, Project> projects = 9;

	reserved 90, 100, 120 to 150; // reserved number label, will not be used
	extensions 100 to 1000; //Numbering labels for third-party extensions
}

 

Common data types: double, float, int32, int64, bool, string, bytes

 

Compile proto file

      protoc --java_out=./output ./PrintDatamatrix.proto

      protoc --cpp_out=./output ./PrintDatamatrix.proto

 

 example:

      proto file definition

syntax="proto2";
package com.seasy.proto;
option java_outer_classname = "PrintDatamatrix";
message PrintDatamatrixDT{
	enum PhoneType{
        MOBILE = 0;  
        HOME = 1;  
        WORK = 2;  
    }

	message PhoneNumber{   
        required PhoneType type = 2 [default=MOBILE];
        optional string number = 1;   
    }

	required string title = 1;
	required int32 width = 2 [default=100];
	required int32 height = 3 [default=100];
	required bytes bitmap = 4;
	optional string file_path = 5;
	optional bool auto_show = 6;
	optional double price = 7;
	optional float salary = 8;
	repeated PhoneNumber phone = 9;
	repeated int32 article_number = 10 [packed=true];
	map<string, int64> projects = 11;
}

 

java use (sender)

PrintDatamatrix.PrintDatamatrixDT.Builder builder = PrintDatamatrix.PrintDatamatrixDT.newBuilder();
builder.setTitle("title");
builder.setWidth(100);
builder.setHeight(100);
builder.setBitmap(ByteString.copyFrom("123456", Charset.forName("UTF-8")));
builder.setFilePath("");
builder.setAutoShow(true);
builder.setPrice(1.0);
builder.setSalary(1.0F);

PrintDatamatrix.PrintDatamatrixDT.PhoneNumber.Builder phoneNumberBuilder = PrintDatamatrix.PrintDatamatrixDT.PhoneNumber.newBuilder();
phoneNumberBuilder.setNumber("123");
phoneNumberBuilder.setType(PhoneType.HOME);

builder.addPhone(phoneNumberBuilder);
builder.addPhone(PrintDatamatrix.PrintDatamatrixDT.PhoneNumber.newBuilder().setNumber("456").setType(PhoneType.WORK));

builder.addArticleNumber(1);
builder.addArticleNumber(2);

builder.putProjects("p1", 1);
builder.putProjects("p2", 2);

byte[] dataBytes = builder.build().toByteArray();

 

java use (receiver)

PrintDatamatrix.PrintDatamatrixDT dt = PrintDatamatrix.PrintDatamatrixDT.parseFrom(dataBytes);
System.out.println(dt.getTitle());
System.out.println(dt.getWidth());
System.out.println(dt.getHeight());
System.out.println(dt.getBitmap().toStringUtf8());
System.out.println(dt.getFilePath());
System.out.println(dt.getAutoShow());
System.out.println(dt.getPrice());
System.out.println(dt.getSalary());

for(PhoneNumber pn : dt.getPhoneList()){
	System.out.println(pn.getNumber() + ", " + pn.getType().name());
}

for(Integer i : dt.getArticleNumberList()){
	System.out.println(i);
}

for(Iterator<String> it=dt.getProjectsMap().keySet().iterator(); it.hasNext();){
	String key = it.next();
	System.out.println(key + "=" + dt.getProjectsMap().get(key));
}

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326173745&siteId=291194637
Recommended