標籤:protobuf repeated optional required netty
最近在做一個基於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)
protobuf的配置原始檔案.proto中,使用修飾符repeated、required、optional產生的java檔案的區別