簡體   English   中英

Java中沒有類名的protocolbuffer反序列化

[英]protocolbuffer de-serialization without the class name in Java

我在文件(sample.dat)中有一個序列化的原型。 為我提供了jar文件,其中包含許多原始的已編譯文件,這些文件再次被編譯為.class文件。 我不知道sample.dat中原型的類型或類別。 我該如何反序列化它? 有什么通用的方法嗎?

我們在jar文件中討論了多少種原型描述符類型? 基本上:您可以查看每種描述符類型,看看它是否有效,或者看起來正確嗎?

基本上,除非您使用Any功能,否則protobuf數據不會提及任何對象的類型-理想情況下,您只需要知道。 但是,解析原始格式以查看所得到的內容是很容易的。 你可以用做protoc工具使用--decode_raw選項通過類似的工具,或在線https://protogen.marcgravell.com/decode 無論這會告訴你它可以了解你的數據,希望可以讓你找出哪些類型,它看起來像的基礎上,比較你看到的一個結構:

  • .proto文件中的message定義
  • 源代碼中生成的類型
  • 庫中生成的類型

注意:二進制protobuf數據不包含成員名稱-僅包含字段編號。 如果您可以看到生成的源或屬性元數據,或反編譯已編譯的庫以查看序列化/反序列化代碼的外觀,則可以通過檢查將名稱手動映射為數字,從而確定類型是否可能。

注意:如果Java代碼包含類型的描述符二進制文件,則可以對已編譯的描述符數據進行解碼-每個描述符數據都應表示來自descriptor.protoDescriptorProto 這無助於告訴您根類型是什么,但可能會幫助您了解每種類型,因為它提供了對元數據的完全訪問權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM