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

标签 java json serialization protocol-buffers

我想序列化一个复杂的 Java 对象并将其扔到互联网上。第一次,我使用 Google Gson 来序列化该类。 Gson 提供了一种简单的方法来将对象序列化为 JSON 字符串,并通过 toJson 和 fromJson 将 JSON 字符串反序列化为对象。然而,JSON 字符串不是那么紧凑,在序列化 byte[] 数组时会带来很大的开销。

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

  • protocol buffer 是否知道内置的 Java 定义的类,例如 BigDecimal、BigInteger……?
  • 如果我们有一个复杂的类,它递归地包含其他用户定义的类作为成员,我们是否需要遍历所有类的定义并将它们声明为在 .proto 文件中归档的消息?如果是这样,这对用户来说非常可怕(也许他们使用一些外部java库并且没有该库中定义的类的源代码)

有没有一个工具可以自动遍历Java类并生成.proto?

最佳答案

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

是的,您需要旅行并编写 Java 类和原型(prototype)之间的映射。这是必要的一步,不幸的是每个人都必须这样做。我不认为有一个自动化工具可以做到这一点。也许你可以写一个并开源它? :)

我认为,您要求的是从java类到protobuf消息的完整一对一映射。一般来说,这种映射很难以自动化方式完成。另外,Google 故意将 protobuf 限制为一种序列化协议(protocol),而不是像 hibernate 和 spring 那样的 ORM。

关于java - 为复杂的Java对象生成.proto文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22903448/

相关文章:

java - 测试 SOA Java 开发的框架和工具

arrays - 我正在尝试使用 v : structure 解析来自 zendesk 的 json 数据

java - 管理多个版本的序列化 Java 对象

java - 当我们选择“刷新”选项时,JFileChooser中的“修改日期”字段不会更新

java - JPA 延迟加载性能优势有多重要?

java - 如何在 Java 中将 JSON 转换为 XML

javascript - 调用nodejs文件的onclick函数

c++ - 如何对多态继承层次结构进行灵活的序列化?

java - 用于 Java 的增量流式 JSON 库

Java Servlet/JSP Cookie 断开连接