我有一个管理节点和弧线图的应用程序,其中节点具有少量属性。现在我需要保存数据,我需要选择一种序列化格式。这是一些明显的列表,但可能还有其他我没有考虑过的。
- Java 序列化
- XML
- JSON
- yaml
- 谷歌协议缓冲区
出于多种原因,Java 序列化无法启动,即使在 Java 世界中,出于互操作性、模式迁移和易用性的原因,XML 和其他序列化格式也是首选。
Scala 的 XML 支持似乎是一个显而易见的选择。然而,我个人觉得将 XML 文字嵌入源代码的想法令人反感(甚至该语言的创建者也承认他对这个决定感到遗憾)。这个特性在生成标记文本时可能更有意义——但是在序列化对象时,你真的需要一个更高级别的 API,它尽可能地将理解内部数据结构的代码与理解序列化语法的代码分开格式 - 这意味着理想情况下,您永远不会在源代码中看到任何 XML。此外,Google 网络搜索显示许多博客文章声称 Scala 的 XML DOM 有很多缺陷并且使用起来很尴尬。(也有许多图书馆声称可以改善这种情况,但随后就变成了选择哪一个的问题。)
JSON 和 Yaml 也可以工作——这里的问题是最流行的序列化库是在 Java 中的,因此任务涉及选择或编写适当的 Scala 包装器类。此外,这些库中的许多都依赖于 bean 反射,这在 Scala 中是可能的,但有些尴尬,需要额外的注释才能使事情正常工作。
最后,我将 Google protobufs 用于许多其他序列化任务。好的部分是 protoc 编译器可以生成与目标语言习语相匹配的优雅 API。然而,在这种情况下,protobufs 的优势之一,即编码数据流的小尺寸,并不重要,我宁愿有一些序列化数据是人类可读的东西。