protobuf的简单应用,json和protocolBuffer的转换简单例子

更新时间:2023-07-14 23:44:18 阅读: 评论:0

protobuf的简单应⽤,json和protocolBuffer的转换简单例⼦Google Protocol Buffer 的使⽤和原理
Protocol Buffers 是⼀种轻便⾼效的结构化数据存储格式,可以⽤于结构化数据串⾏化,
很适合做数据存储或 RPC 数据交换格式。它可⽤于通讯协议、数据存储等领域的语⾔⽆
关、平台⽆关、可扩展的序列化结构数据格式。⽬前提供了 C++、Java、Python 三种语
⾔的 API。
简介
什么是 Google Protocol Buffer?假如您在⽹上搜索,应该会得到类似这样的⽂字介绍:
Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语⾔数据标准,⽬前
已经正在使⽤的有超过 48,162 种报⽂格式定义和超过 12,183 个 .proto ⽂件。他们⽤于
RPC 系统和持续数据存储系统。
Protocol Buffers 是⼀种轻便⾼效的结构化数据存储格式,可以⽤于结构化数据串⾏化,
或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可⽤于通讯协议、数据存储
等领域的语⾔⽆关、平台⽆关、可扩展的序列化结构数据格式。⽬前提供了 C++、
Java、Python 三种语⾔的 API。
或许您和我⼀样,在第⼀次看完这些介绍后还是不明⽩ Protobuf 究竟是什么,那么我想
⼀个简单的例⼦应该⽐较有助于理解它。
例⼦:
package org.protob;
import org.protob.W.helloworld;
le.protobuf.InvalidProtocolBufferException;
lecode.protobuf.format.JsonFormat;
lecode.protobuf.format.JsonFormat.ParException;
/
**
* 下载 protoc-2.5.0-win32.zip
* cmd: --java_out=./ w.proto
* @author liangrui
*
*/
public class Main {
public static void main(String[] args) throws Exception {
main2(null);
main3(null);
main4(null);
}
//序列化  /返序列化
public static void main2(String[] args) throws InvalidProtocolBufferException {
//序列化
helloworld.Builder wBuilder();
builder.tId(10);
builder.tStr("fx");
builder.tOpt(20);
helloworld info=builder.build();
byte[] ByteArray() ;
//返序列化
helloworld msg = helloworld.parFrom(result);
System.out.println(msg);
}
//protobuf转json
//protobuf转json
public static void main3(String[] args) throws InvalidProtocolBufferException {
//序列化
helloworld.Builder wBuilder();
builder.tId(10);
builder.tStr("fx");
builder.tOpt(20);
dbsmhelloworld info=builder.build();
byte[] ByteArray() ;
//返序列化
helloworld hello = helloworld.parFrom(result);
System.out.println(hello);
String jsonFormat =JsonFormat.printToString(hello);
System.out.println(jsonFormat);
}
//josn转protobuf
public static void main4(String[] args) throws ParException {
helloworld.Builder builder =wBuilder();
String jsonFormat = "{id:11,str:'xxx',opt:50}";
<(jsonFormat, builder);
System.out.println(builder.build());
}
trigger warning意思}
/**
output:
id: 10
str: "fx"
opt: 20
id: 10
str: "fx"
opt: 20
{"id": 10,"str": "fx","opt": 20}
id: 11
str: "xxx"
opt: 50
*/
proto⽂件 w.proto
package org.protob;
message helloworld
{
required int32    id = 1;  // ID
required string    str = 2;  // str
optional int32    opt = 3;  //optional field
}
⽣成后的java类
// Generated by the protocol buffer compiler.  DO NOT EDIT! // source: w.proto
package org.protob;
public final class W {
private W() {}
public static void registerAllExtensions(
}
public interface helloworldOrBuilder
le.protobuf.MessageOrBuilder {
// required int32 id = 1;
/**
* <code>required int32 id = 1;</code>
*
* <pre>
* ID
* </pre>
*/
boolean hasId();
/**
* <code>required int32 id = 1;</code>
*
* <pre>
* ID
* </pre>
*/
int getId();
// required string str = 2;
/**
* <code>required string str = 2;</code>
*
* <pre>
* str
* </pre>
*/
boolean hasStr();
/**
* <code>required string str = 2;</code>
*
* <pre>
* str
* </pre>
*/
java.lang.String getStr();
/**
* <code>required string str = 2;</code>
*
* <pre>switzer
nylon* str
* </pre>
*/
getStrBytes();
// optional int32 opt = 3;
/**
* <code>optional int32 opt = 3;</code>
*
* <pre>
*optional field
* </pre>
*/
boolean hasOpt();
/
**
* <code>optional int32 opt = 3;</code>
*
* <pre>
*optional field
* </pre>
*/
int getOpt();
}
/**
* Protobuf type {@code org.protob.helloworld}
*/
public static final class helloworld extends
implements helloworldOrBuilder {
// wBuilder() to construct.
private le.protobuf.GeneratedMessage.Builder<?> builder) {
super(builder);
this.unknownFields = UnknownFields();
}
private helloworld(boolean noInit) { this.unknownFields = le.DefaultInstance(); }
private static final helloworld defaultInstance;
public static helloworld getDefaultInstance() {
return defaultInstance;
}
public helloworld getDefaultInstanceForType() {
return defaultInstance;
}
private le.protobuf.UnknownFieldSet unknownFields;
@java.lang.Override
public le.protobuf.UnknownFieldSet
getUnknownFields() {
return this.unknownFields;
}
private helloworld(
le.protobuf.InvalidProtocolBufferException {
initFields();
int mutable_bitField0_ = 0;
try {
boolean done = fal;
while (!done) {
int tag = adTag();
switch (tag) {
ca 0:
done = true;
break;
default: {
if (!parUnknownField(input, unknownFields,
extensionRegistry, tag)) {
done = true;
}
break;
}
ca 8: {
bitField0_ |= 0x00000001;
id_ = adInt32();
break;
}
ca 18: {
bitField0_ |= 0x00000002;
str_ = adBytes();
break;
}
ca 24: {
bitField0_ |= 0x00000004;
opt_ = adInt32();
break;
}
}
}
} catch (le.protobuf.InvalidProtocolBufferException e) {
throw e.tUnfinishedMessage(this);
} catch (java.io.IOException e) {
throw le.protobuf.InvalidProtocolBufferException(
信天翁科
} finally {
this.unknownFields = unknownFields.build();
makeExtensionsImmutable();
}
}
public static le.protobuf.Descriptors.Descriptor
getDescriptor() {
return org.protob.W.internal_static_org_protob_helloworld_descriptor;
}
le.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return org.protob.W.internal_static_org_protob_helloworld_fieldAccessorTable          .ensureFieldAccessorsInitialized(
org.protob.W.helloworld.class, org.protob.W.helloworld.Builder.class);
}
public le.protobuf.Parr<helloworld> PARSER =
le.protobuf.AbstractParr<helloworld>() {
public helloworld parPartialFrom(
雪利
le.protobuf.InvalidProtocolBufferException {
return new helloworld(input, extensionRegistry);
}
};
@java.lang.Override
le.protobuf.Parr<helloworld> getParrForType() {
return PARSER;
}
private int bitField0_;
英语语音学// required int32 id = 1;
public static final int ID_FIELD_NUMBER = 1;
mrs是什么意思private int id_;
/
北美留学
**
* <code>required int32 id = 1;</code>
*
* <pre>
* ID
* </pre>
*/xongchu
public boolean hasId() {

本文发布于:2023-07-14 23:44:18,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1096940.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图