十一.Protobuf3可選項


Protobuf3 可選項

  .proto文件中可以聲明許多選項。選項不會改變聲明的整體含義,但可能會影響在特定上下文中處理聲明的方式。可用選項的完整列表在google/protobuf/descriptor.proto中定義

  有些選項是文件級選項,這意味着它們應該寫在頂級范圍內,而不是任何消息、枚舉或服務定義內。有些選項是消息級選項,這意味着它們應該寫在消息定義中。有些選項是字段級選項,這意味着它們應該寫在字段定義中。選項也可以寫在枚舉類型、枚舉值、服務類型和服務方法上;然而,目前沒有任何有用的選擇。

  以下是一些最常用的選項:

  java_package (file option): 用於生成的Java類的包。如果.proto文件中沒有給出明確的Java _ package選項,那么默認情況下將使用proto package (在.proto文件中使用“package”關鍵字指定)。然而,proto包通常不能成為好的Java包,因為proto包不應該以反向域名開始。如果不生成Java代碼,則此選項無效。

  option java_package = "com.example.foo";

  java_multiple_files (file option):  導致頂層消息、枚舉和服務在包級別定義,而不是在以.proto文件命名的外部類中定義。

  option java_multiple_files = true;

  java_outer_classname (file option): 要生成的最外面的Java類的類名(因此也是文件名)。如果.proto文件中未指定顯式 java_outer_classname,則類名將通過轉換來構造。原型文件名轉換為ccamel-case(因此foo_bar.proto變成了FooBar.java)。如果不生成Java代碼,則此選項無效。

  option java_outer_classname = "Ponycopter";

  optimize_for (file option): 可以設置為SPEED、CODE_SIZE或LITE_RUNTIME。這會以以下方式影響c++和Java代碼生成器(以及可能的第三方生成器) :

  SPEED (default): 協議緩沖區編譯器將生成用於序列化、解析和對消息類型執行其他常見操作的代碼。這個代碼是高度優化的。

  CODE_SIZE: 協議緩沖編譯器將生成最少的類,並將依賴共享的、基於反射的代碼來實現序列化、解析和各種其他操作。因此,生成的代碼將比速度小得多,但是操作將會更慢。類仍將實現與它們在速度模式下完全相同的公共API。這種模式在包含大量.proto文件的應用程序中非常有用,並且不需要所有這些文件都非常快。

  LITE_RUNTIME: 協議緩沖編譯器將生成僅依賴於“lite”運行時庫( ibprotobuf-lite而不是libprotobuf )的類。lite運行時比整個庫小得多(大約小一個數量級),但省略了某些功能,如描述符和反射。這對在手機等受限平台上運行的應用程序特別有用。編譯器仍然會生成所有方法的快速實現,就像在速度模式下一樣。生成的類將只實現每種語言的MessageLite接口,它只提供完整消息接口方法的子集。

  option optimize_for = CODE_SIZE;

  cc_enable_arenas (file option): 為c++生成的代碼啟用競技場分配。

  objc_class_prefix (file option): 設置Objective-C類前綴,該前綴加在所有Objective-C生成的類和該. proto中的枚舉之前。沒有默認值。按照Apple的建議,您應該使用3 - 5個大寫字符之間的前綴。請注意,Apple保留了所有2個字母前綴。

  deprecated (field option): 如果設置為true,則表示該字段已過時,不應由新代碼使用。在大多數語言中,這沒有實際效果。在Java中,這變成了一個@Deprecated annotation的注釋。將來,其他語言特定的代碼生成器可能會在該字段的訪問者上生成折舊注釋,這反過來會在編譯試圖使用該字段的代碼時發出警告。如果該字段未被任何人使用,並且您希望阻止新用戶使用它,請考慮用保留語句替換字段聲明。

  int32 old_field = 6 [deprecated=true];

自定義選項

  協議緩沖區還允許您定義和使用自己的選項,這是大多數人不需要的高級功能,如果你確實認為你需要創建自己的選項,請參見proto 2語言指南了解詳細信息。請注意,創建自定義選項使用擴展,這僅允許用於proto 3中的自定義選項。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM