protobuf的配置原始文件.proto中,使用修飾符repeated、required、optional生成的java文件的區別

最近在做一個基於Netty框架的項目。

該項目使用了Google的Protobuf作爲編解碼的框架。(沒有使用XML或者json是爲了更好的提高效率)。

經過了一段時間的使用我對Protobuf的原始文件進行一個簡單的使用方法總結。

我主要在這裏說明一下,原始文件.proto中,修飾符repeated、required、optional的區別。

0.windows環境,java工程

1.安裝protobuf後,找到protoc.exe

2.寫一個配置文件進行批處理(.bat),如下圖所示



3.寫一個proto文件,如:


package trade;

message Testq{
	required string deal_no=1;
	required string client_id=2;
}

(注意:此處之後要進行修飾符repeated、required、optional的區別比較,因此會不斷的修改proto文件。)


4.開始進行比較。


4.1使用repeated和不使用repeated的區別。

     repeated 就是說該字段是指定類型的數組。在java中是一個list,也就說,在調用的時候可以調用一個list集合,不需要一個一個的調用了,這樣做很方便。下面我們來看圖,進行詳細的說明:


   4.1.1配置文件的比較,

        


下面看看在java中的區別:


首先我們會看待到,在java中增加了public interface TestsOrBuilder的這些代碼,然後會看到,java.util.List<trade.Test.Testq> getTestsList();的代碼,這段代碼說明增加了repeated修飾符之後,生成的java代碼爲list類型。




然後,我們會在697行找到Testq的代碼,因此,增加了repeated修飾之後,也會增加600多行代碼。詳見下圖:



然後在下方還會發現,不同,詳見下圖:

例如會在有repeated的文件中增加,internal_static_trade_Tests_descriptor的代碼片段



還會增加對於list的簡單描述。



4.2  關於requird和optional修飾符的區別


先看配置文件,如下圖:



再來看生成的java代碼的區別:


首先會調整說明註釋,如下圖




然後,關鍵代碼也會進行調整,如下圖:不一樣的代碼required和optional-1




不一樣的代碼required和optional-2




不一樣的代碼required和optional-3





通過代碼我們可以看出,required的選項應該表示該字段必選,optional表示可先。


最後那個\001 和\002的區別,我查到了之後再補充吧。

這個是在網上找的一段關於這個\002的說明,有懂的人幫着確認或者解釋一下吧。

Control Characters


                    CTRL   (^D means to hold the CTRL key and hit d)
Oct  Dec Char  Hex  Key     Comments
\000   0  NUL  \x00  ^@ \0 (Null byte)
\001   1  SOH  \x01  ^A    (Start of heading)
\002   2  STX  \x02  ^B    (Start of text)









   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章