为复杂的Java对象生成.proto文件

时间:2014-04-07 04:09:09

标签: java json serialization protocol-buffers

我想序列化一个复杂的Java对象抛出Internet。我第一次使用Google Gson序列化了这个类。 Gson提供了一种简单的方法,可以将对象序列化为JSON字符串,并通过toJson和fromJson从JSON字符串反序列化为对象。但是,JSON字符串不那么紧凑,并且在序列化byte []数组时会引入很大的开销。

我正在阅读Google协议缓冲区。根据教程,用户必须手动为每条消息编写.proto文件。似乎协议缓冲区无法识别用户定义的类(Google protocol buffers - user defined java objects as messages fields)。我有两个问题:

  • 协议缓冲区是否知道内置的Java定义类,如BigDecimal,BigInteger,......?
  • 如果我们有一个复杂的类,递归地将其他用户定义的类作为成员,我们是否需要遍历所有类的定义并将它们声明为它们在.proto文件中提交的消息?如果是这样,对用户来说非常糟糕(也许他们使用一些外部java库,并且没有该库中已定义类的源代码)

是否有工具可以自动遍历Java类并生成.proto?

1 个答案:

答案 0 :(得分:1)

protobuf中有一系列可能的类型。 BigDecimal / BigInteger不是。您可以编写自己的转换步骤。 https://developers.google.com/protocol-buffers/docs/proto

是的,您需要旅行并编写从/到java类和proto的映射。这是必要的一步,不幸的是每个人都必须这样做。我不认为有一个自动化工具。也许你可以写一个和开源的吗? :)

我想,你问的是从java类到protobuf消息的完整的一对一映射。通常,这种映射很难以自动化方式完成。此外,谷歌故意将protobuf限制为一个序列化协议,而不是像hibernate和spring那样的ORM。