Protocol Buffer序列化對(duì)比Java序列化._第1頁
Protocol Buffer序列化對(duì)比Java序列化._第2頁
Protocol Buffer序列化對(duì)比Java序列化._第3頁
Protocol Buffer序列化對(duì)比Java序列化._第4頁
Protocol Buffer序列化對(duì)比Java序列化._第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、初識(shí)Protocol Buff是谷歌推出的一種序列化協(xié)議.而Java序列化協(xié)議也是一種協(xié)議.兩者的目的是,將對(duì)象序列化成字節(jié)數(shù)組,或者說是二進(jìn)制數(shù)據(jù),那么他們之間 有什么差異呢.proto對(duì)象要使用PB,我們需要定義一個(gè)proto對(duì)象,其支持的數(shù)據(jù)類型如下:Protobuf定義了一套基本數(shù)據(jù)類型。幾乎都可以映射到C+Java等語言的基礎(chǔ)數(shù)據(jù)類型.protobuf數(shù)據(jù)類型描述打包bool布爾類型1字節(jié)double64位浮點(diǎn)數(shù)Nfloat32為浮點(diǎn)數(shù)Nint3232位整數(shù)、N17417517617717817918018118218318418518618718818919019119219319

2、4195196197198199200201202203if (size != -1) return size;size = 0;if (bitFieldO_ & 0 x00000001) = 0 x00000001) size += com. google. protobuf. CodedOutputStream, computeInt64Size(1, playerld_);)if (bitFieldO_ & 0 x00000002) = 0 x00000002) size += com. google, protobuf. CodedOutputStream, computeInt32S

3、ize (2, age_);)if (bitFieldO_ & 0 x00000004) = 0 x00000004) size += com. google, protobuf. CodedOutputStream puteBytesSize(3, getNameBytes();)(int dataSize = 0;for (int i = 0; i skills_. size() ; i+) dataSize += com. google, protobuf. CodedOutputStream puteInt32SizeNoTag(ski 1ls_. get(i);)size += da

4、taSize;size += 1 * getSkillsList (). size();)size 十二 getUnknownFields(). getSerializedSize();memoizedSerializedSize 二 size;return size;private static final long serialVersionUID = 0L;java. lang. Overrideprotected java. lang. Object writeReplace()throws java. io. ObjectStreamException return super. w

5、riteReplace();)public static com. proto. PlayerModule. PBPlayer parseFrom(com. google, protobuf. ByteString data)throws com. google, protobuf. InvalidProtocolBufferException return newBuiIder(). mergeFrom(data). buildParsed();)public static com. proto. PlayerModule. PBPlayer parseFrom(com. google, p

6、rotobuf. ByteString data,com. google, protobuf. ExtensionRegistryLite extensionRegistry)throws com. google, protobuf. InvalidProtocolBufferException return newBuiIder(). mergeFrom(data, extensionRegistry), buildParsed();)public static com. proto. PlayerModule. PBPlayer parseFrom(byte data)throws com

7、. google, protobuf. InvalidProtocolBufferException return newBuiIder(). mergeFrom(data). buildParsed();)public static com. proto. PlayerModule. PBPlayer parseFrom(byte data,com. google, protobuf. ExtensionRegistryLite extensionRegistry)throws com. google, protobuf. InvalidProtocolBufferException ret

8、urn newBuiIder(). mergeFrom(data, extensionRegistry)204205206207208209210211212213214215216217218219220221222223224225226227228229230231232.buildParsed();public static com. proto. PlayerModule. PBPlayer parseFrom(java. io. Inputs tream input)throws java. io. lOException return newBuilder(). mergeFro

9、m(input). buildParsed();public static com. proto. PlayerModule. PBPlayer parseFrom(java. io. Inputstream input,com. google, protobuf. ExtensionRegistryLite extensionRegistry)throws java. io. lOException return newBuilder(). mergeFrom(input, extensionRegistry).buildParsed();public static com. proto.

10、PlayerModule. PBPlayer parseDelimitedFrom(java, io. InputStream input)throwsjava. io.lOException Builder builder=newBuilder();if (builder.mergeDelimitedFrom(input) 248returnbuilder.buildParsed();249 else 250returnnull;251252)public static com. proto. PlayerModule. PBPlayer parseDelimitedFrom(java. i

11、o. InputStream input,com. google, protobuf. ExtensionRegistryLite extensionRegistry)throws java. io. lOException Builder builder - newBuilder();if (builder. mergeDelimitedFrom(input, extensionRegistry) return builder. buildParsed(); else 261262263264265266267268269270271272273274275276277278279 type

12、)280281282283284285286287288289return null;public static com. proto. PlayerModule. PBPlayer parseFrom(com. google, protobuf. CodedlnputStream input)throws java. io. lOException return newBuilder(). mergeFrom(input). buildParsed();)public static com. proto. PlayerModule. PBPlayer parseFrom(com. googl

13、e, protobuf. CodedlnputStream input,com. google. protobuf. ExtensionRegistryLite extensionRegistry)throws java. io. lOException return newBuilder(). mergeFrom(input, extensionRegistry), buildParsed();)public static Builder newBuilder() return Builder, create() ; public Builder newBuilderForType() re

14、turn newBuilder(); public static Builder newBuilder(com. proto. PlayerModule. PBPlayer protoreturn newBuilder(). mergeFrom(prototype);public Builder toBuilder() return newBuilder(this); java. lang. Overrideprotected Builder newBuilderForType(com. google, protobuf. GeneratedMessage. BuilderParent par

15、ent) Builder builder = new Builder (parent);return builder;290291292293294295296297298299300 orTable;301302303304305306307308309310311312313314315316317318public static final class Builder extendscom. google, protobuf. GeneratedMessage. Builderimplements com. proto. PlayerModule. PBP1ayerOrBui1der p

16、ublic static final com. google, protobuf. Descriptors. Descriptor getDescriptor() return com. proto. PlayerModule. internal_static_PBPlayer_descriptor;)protected com. google, protobuf. GeneratedMessage. FieldAccessorTable internalGetFieldAccessorTable () return com. proto. PlayerModule. internal_sta

17、tic_PBPlayer_fieldAccess/ Construct using com. proto. PlayerModule. PBPlayer. newBuilder ()private Builder() maybeForceBuilderlnitialization();private Builder(BuilderParent parent) super(parent);maybeForceBui1derInitialization();private void maybeForceBuiIderInitialization() if (com. google. protobu

18、f. GeneratedMessage. alwaysUseFieldBuilders) private static Builder create() return new Builder();319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348public Builder clear() super, clear ();playerld_ 二 0L;bitFieldO_ = (bitFieldO_ & 0 x00000001);age_ 二 0;bitFieldO

19、_ = (bitFieldO_ & 0 x00000002); name_ =;bitFieldO, = (bitFieldO_ & 0 x00000004);skills_ = java. util. Collections. emptyList ();bitFieldO_ = (bitFieldO_ & 0 x00000008);return this;public Builder clone() return create(). mergeFrom(buildPartial ();public com. google, protobuf. Descriptors. Descriptorg

20、etDescriptorForType () return com. proto. PlayerModule. PBPlayer. getDescriptor();public com. proto. PlayerModule. PBPlayer getDefaultlnstanceForType() return com. proto. PlayerModule. PBPlayer. getDefaultlnstance();public com. proto. PlayerModule. PBPlayer buildO com. proto. PlayerModule. PBPlayer

21、result : buildPartial();if (Iresult. isInitializedO) 349throw newUninitializedMessageException(result);350)351return result;352)353354private com. proto. PlayerModule. PBPlayer buildParsedO355throws com. google, protobuf. InvalidProtocolBufferException 356com. proto. PlayerModule. PBPlayer result =

22、buildPartial();357if (result, islnitialized() 358throw newUninitializedMessageException (359result). asInvalidProtocolBufferException();360)361return result;362)363364public com. proto. PlayerModule. PBPlayer buildPartial() 365com. proto. PlayerModule. PBPlayer result = new com. proto. PlayerModule.

23、PBPlayer(this);366int from_bitFieldO_ 二 bitFieldO_;367int to_bitFieldO_ 二 0;368if (from_bitFieldO_ & 0 x00000001)二二 0 x00000001) 369to_bitFieldO_ |= 0 x00000001; TOC o 1-5 h z 370371result, playerld = playerld ;372if(from_bitFieldO_&0 x00000002)二二0 x00000002)373to_bitFieldO |= 0 x00000002;374375resu

24、lt. age_ 二 age_;376if(from_bitFieldO_&0 x00000004)=0 x00000004)377to_bitFieldO_ h 0 x00000004;378379380381382383384385386387388389390391392393394395396397398399400 return401402403404405406result. name_ 二 name_;if (bitFieldO_ & 0 x00000008)二二 0 x00000008) skills_ 二 java. util. Collections, unmodifiab

25、leList(skills_);bitFieldO_ = (bitFieldO_ & 0 x00000008);)result. skills_ = skills_;result. bitFieldO_ = to_bitFieldO_;onBuilt ();return result;)public Builder mergeFrom(com. google, protobuf. Message other) if (other instanceof com. proto. PlayerModule. PBPlayer) return mergeFrom(com. proto. PlayerM

26、odule. PBPlayer)other); else super. mergeFrom(other);return this;public Builder mergeFrom(com. proto. PlayerModule. PBPlayer other) if (other 二二 com. proto. PlayerModule. PBPlayer. getDefaultlnstance() this;if (other. hasPlayerld() setPlayerld(other. getPlayerld();)if (other. hasAge () setAge (other

27、. getAge ();407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436if (other. hasName ()setName(other. getName();if (!other. skills_. isEmptyO) if (skills_. isEmptyO) skills_ 二 other. skills_;bitFieldO_ = (bitFieldO_ & 0 x00000008); else ensureSkillsIsMutable();ski

28、lls_. addAll(other. skills_);)onChanged ();this. mergeUnknownFields(other. getUnknownFields(); return this;)public final boolean isInitializedO if (IhasPlayerldO) return false;if (!hasAge () return false;if (!hasName () return false;4374384394404414424434444454464474484494504514524534544554564574584

29、59460461462463464465466return true;public Builder mergeFrom(com. google. protobuf. CodedlnputStream input,com. google, protobuf. ExtensionRegistryLite extensionRegistry) throws java. io. lOException com. google, protobuf. UnknownFieldSet. Builder unknownFields = com. google, protobuf. UnknownFieldSe

30、t. newBuilder (this, getUnknownFie1ds ();while (true) int tag = input. readTagO ;switch (tag) case 0:this. setUnknownFields (unknownFields. buildO);onChanged ();return this;default: if (!parseUnknownField(input, unknownFields, extensionRegistry, tag) this. setUnknownFields(unknownFields. buildO); on

31、Changed ();return this;)break;)case 8: bitFieldO_ |= 0 x00000001;playerld_ = input. readlnt64();break;protobuf數(shù)據(jù)類型uin32無符號(hào)32位整數(shù)Nint6464位整數(shù)Nuint6464為無符號(hào)整Nsint3232位整數(shù),處理負(fù)數(shù)效率更高Nsing6464位整數(shù)處理負(fù)數(shù)效率更高Nfixed3232位無符號(hào)整數(shù)4fixed6464位無符號(hào)整數(shù)8sfixed3232位整數(shù)、能以更高的效率處理負(fù)數(shù)4sfixed6464為整數(shù)8string只能處理ASCH字符Nbytes用于處理多字節(jié)的語言字符

32、、如中文Nprotobuf數(shù)據(jù)類型描述打包467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496case 16: bitFieldO_ |= 0 x00000002;age_ 二 input.readlnt32();break;)case 26: bitFieldO_ |= 0 x00000004;name_ = input. readBytes();break;)case 32: ensureSkillsIsMutable();skills_. add(input.

33、readlnt32();break;)case 34: int length = input. readRawVarint32();int limit = input. pushLimit(length);while (input.getBytesUntilLimit() 0) addSkills(input. readlnt32();)input. popLimit(limit);break;)private int bitFieldO497498/ required int64 playerld = 1;499private long playerld_ ;500public boolea

34、n hasPlayerldO 501return (bitFieldO_ & 0 x00000001)二二 0 x00000001);502503public long getPlayerldO 504return playerld_;505506public Builder setPlayerId(long value) 507bitFieldO_ |= 0 x00000001;508playerld_ = value;509onChanged ();510return this;511512public Builder clearPlayerldO 513bitFieldO_ = (bit

35、FieldO_ & 0 x00000001);514playerld_ = 0L;515onChanged ();516return this;517)518519/ required int32 age = 2;520private int age_ ;521public boolean hasAge() 522return (bitFieldO_ & 0 x00000002) = 0 x00000002);523)524public int getAge() 525return age_;526527528529530531532533534535536537538539540541542

36、5435445455465475480;549550551552553554555public Builder setAge(int value) bitFieldO_ |= 0 x00000002;age_ 二 value;onChanged ();return this;public Builder clearAge() bitFieldO_ = (bitFieldO_ & 0 x00000002);age_ = 0;onChanged ();return this;)/ required string name = 3;private java. lang. Object name_ =

37、;public boolean hasName() return (bitFieldO_ & 0 x00000004) = 0 x00000004);public String getNameO java. lang. Object ref = name_;if (!(ref instanceof String) String s = (com. google, protobuf. ByteString) ref). toStringUtf8name_ 二 s;return s; else return (String) ref;public Builder setName(String va

38、lue) 556557558559560561562563564565566567568569570571572573574575576577 tions.578579580581582583584if (value 二二 null) throw new NullPointerExceptionO;bitFieldO_ |= 0 x00000004;name_ 二 value;onChanged ();return this;public Builder clearName() bitFieldO_ = (bitFieldO_ & 0 x00000004);name_ 二 getDefault

39、lnstance (). getNameO ;onChanged ();return this;void setName(com. google, protobuf. ByteString value) bitFieldO_ |= 0 x00000004;name_ = value;onChanged ();/ repeated int32 skills = 4;private java. util. List skills_ = java. util. Collec emptyList ();private void ensureSki11sIsMutab1e() if (!(bitFiel

40、dO_ & 0 x00000008) = 0 x00000008) skills = new java. util. ArrayList(skills );bitFieldO_ |= 0 x00000008;)public java. util. List585getSkillsList() 586return java.util.Collections, unmodifiableList(skills_);587588public int getSkillsCount() 589return skills_. size();590)591public int getSkills(int in

41、dex) 592return skills_. get(index);593594public Builder setSkills(595int index, int value) 596ensureSkillsIsMutable();597skills_. set(index, value);598onChanged ();599return this;600)601public Builder addSkills(int value) 602ensureSkillsIsMutable();603skills_. add(value);604onChanged ();605return th

42、is;606)607public Builder addAHSkills(608java. lang. Iterable values) 609ensureSkillsIsMutable();610super. addAll(values, skills.);611onChanged ();612return this;613614public Builder clearSkills() 615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644skills_ 二 java

43、. util. Collections. emptyList();bitFieldO_ = (bitFieldO_ & 0 x00000008);onChanged ();return this;/ protoc_insertion_point(builder_scope:PBPlayer)static defaultinstance = new PBPlayer(true);defaultinstance. initFields ();)/ protoc_insertion_point(class_scope:PBPlayer)public interface PBResourceOrBui

44、Iderextends com. google, protobuf. MessageOrBuilder / required int64 gold = 1;boolean hasGoldO ;long getGoldO ;/ required int32 energy = 2;boolean hasEnergy();int getEnergyO ;)public static final class PBResource extendscom. google, protobuf. GeneratedMessage64564664764864965065165265365465565665765

45、8659660661662663664665666667668 orTable;669670671672673implements PBResourceOrBuilder (/ Use PBResource. newBuilderO to construct.private PBResource(Builder builder) super (builder);)private PBResource(boolean nolnit) private static final PBResource defaultinstance;public static PBResource getDefaul

46、tlnstance() return defaultInstance;)public PBResource getDefaultlnstanceForType() return defaultInstance;)public static final com. google, protobuf. Descriptors. Descriptor getDescriptor() return com. proto. PlayerModule. internal_static_PBResource_descriptor; protected com. google, protobuf. Genera

47、tedMessage. FieldAccessorTable internalGetFieldAccessorTable() return com. proto. PlayerModule. internal_static_PBResource_fieldAccess)private int bitFieldO ;/ required int64 gold = 1;public static final int GOLD FIELD _NUMBER = 1;private long gold_;67467567667767867968068168268368468568668768868969

48、0691692693694695696697698699700701702703public boolean hasGoldO return (bitFieldO_ & 0 x00000001) = 0 x00000001);)public long getGoldO return gold_;)/ required int32 energy = 2;public static final int ENERGY_FIELD_NUMBER = 2;private int energy_;public boolean hasEnergy() return (bitFieldO & 0 x00000

49、002) = 0 x00000002);)public int getEnergy() return energy_;)private void initFields () gold_ = 0L;energy_ 二 0;)private byte memoizedlslnitialized 二-1;public final boolean isInitializedO byte islnitialized = memoizedlslnitialized;if (islnitialized != -1) return islnitialized = 1;if (IhasGoldO) memoiz

50、edlslnitialized = 0;return false;if (IhasEnergy() memoizedlslnitialized = 0;return false;memoizedlslnitialized = 1;return true;)public void writeTo(com. google, protobuf. CodedOutputStream output) throws java. io. lOException getSerializedSize ();if (bitFieldO_ & 0 x00000001) = 0 x00000001) output.

51、writelnt64(l, gold_);)if (bitFieldO_ & 0 x00000002) = 0 x00000002) output. writelnt32(2, energy_);)getUnknownFields(). writeTo(output);)private int memoizedSerializedSize = -1;public int getSerializedSize() int size = memoizedSerializedSize;if (size != -1) return size;size = 0;if (bitFieldO_ & 0 x00

52、000001) = 0 x00000001) size +二 com. google. protobuf. CodedOutputStream704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733, computeInt64Size(1, gold_);734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763if (bitFieldO_ & 0 x

53、00000002) = 0 x00000002) size += com. google. protobuf. CodedOutputStream, computeInt32Size(2, energy_);size 十= getUnknownFields(). getSerializedSize();memoizedSerializedSize = size;return size;)private static final long serialVersionUID = 0L;java. lang. Overrideprotected java. lang. Object writeRep

54、lace()throws java. io. ObjectStreamException return super. writeReplace ();public static com. proto. PlayerModule.PBResource parseFrom(com. google, protobuf. ByteString data)throws com. google, protobuf. InvalidProtocolBufferException return newBuilder (). mergeFrom(data). buildParsed();)public stat

55、ic com. proto. PlayerModule. PBResource parseFrom(com. google, protobuf. ByteString data,com. google, protobuf. ExtensionRegistryLite extensionRegistry)throws com. google, protobuf. InvalidProtocolBufferException return newBuilder(). mergeFrom(data, extensionRegistry).buildParsed();public static com

56、. proto. PlayerModule. PBResource parseFrom(byte data)protobuf數(shù)據(jù)類型描述打包enum可以包含一個(gè)用戶自定義的枚舉類型uint32N(uint32)message可以包含一個(gè)用戶自定義的消息類型Nproto對(duì)象結(jié)構(gòu)類似于java的class,在同一個(gè)module里,定義了兩個(gè) 類PBPlayer和PBResource,各自擁有一些成員變量.1 option java package = com. proto”;2 option java outer_classname =PlayerModule”;3message PBPlayer

57、required int64 playerld = 1;required int32 age = 2;required string name = 3;repeated int32 skills = 4;)message PBResource required int64 gold = 1;17 required int32 energy = 2;18764throws com. google, protobuf. InvalidProtocolBufferException 765 return newBuilder(). mergeFrom(data). buildParsed();766

58、)767public static com. proto. PlayerModule. PBResource parseFrom(768byte data,769com. google, protobuf. ExtensionRegistryLite extensionRegistry)770throws com. google, protobuf. InvalidProtocolBufferException 771 return newBuilder(). mergeFrom(data, extensionRegistry)772. buildParsed();773)774 public

59、 static com. proto. PlayerModule. PBResource parseFrom(java. io. Inpu tStream input)775throws java. io. lOException 776 return newBuilder(). mergeFrom(input). buildParsed();777)778public static com. proto. PlayerModule. PBResource parseFrom(779java. io. Inputstream input,780com. google, protobuf. Ex

60、tensionRegistryLite extensionRegistry)781throws java. io. lOException 782 return newBuilder(). mergeFrom(input, extensionRegistry)783. buildParsed();784)785 public static com. proto. PlayerModule. PBResource parseDelimitedFrom(jav a. io. InputStream input)786throws java. io. lOException 787Builder b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論