【问题标题】:Choosing an object serialization format in Scala在 Scala 中选择对象序列化格式
【发布时间】:2013-01-11 02:39:54
【问题描述】:

我有一个管理节点和弧线图的应用程序,其中节点具有少量属性。现在我需要保存数据,我需要选择一种序列化格式。以下是一些显而易见的列表,但可能还有一些我没有考虑过。

  • Java 序列化
  • XML
  • JSON
  • Yaml
  • Google 协议缓冲区

由于多种原因,Java 序列化并不适用,即使在 Java 世界中,由于互操作性、模式迁移和易用性等原因,XML 和其他序列化格式也是首选。

Scala 的 XML 支持似乎是一个显而易见的选择。然而,我个人觉得将 XML 文字嵌入源代码的想法令人反感(甚至该语言的创建者也承认他对这个决定感到遗憾)。这个特性在生成标记文本时可能更有意义——但是在序列化对象时,你真的需要一个更高级别的 API,它尽可能地将理解内部数据结构的代码与理解序列化语法的代码分开格式 - 这意味着理想情况下,您永远不会在源代码中看到任何 XML。此外,Google 网络搜索显示许多博客文章声称 Scala 的 XML DOM 有很多缺陷并且使用起来很尴尬。 (也有许多图书馆声称可以改善这种情况,但随后就变成了选择哪一个的问题。)

JSON 和 Yaml 也可以工作 - 这里的问题是最流行的序列化库是 Java 中的,因此任务涉及选择或编写适当的 Scala 包装器类。此外,这些库中的许多都依赖于 bean 反射,这在 Scala 中是可能的,但有点尴尬,需要额外的注释才能让事情正常工作。

最后,我将 Google protobufs 用于许多其他序列化任务。好的部分是 protoc 编译器可以生成与目标语言习语相匹配的优雅 API。但是,在这种情况下,protobufs 的优势之一,即编码数据流的小尺寸并不重要,我宁愿有一些序列化数据是人类可读的东西。

【问题讨论】:

    标签: xml json scala serialization yaml


    【解决方案1】:

    在我看来,JSON 在 Scala 世界中是一种流行的选择,尤其是 Play 框架提供的基于类型类的 API:http://www.playframework.org/documentation/2.0.1/ScalaJson

    【讨论】:

    • 所以我对 Play 的范围有点困惑;如果可能的话,我想添加最少的依赖项,而不是依赖一些带有大量花里胡哨的巨型框架(特别是考虑到这是一个 Swing 应用程序,而不是一个网络应用程序。)理想情况下,我希望能够将 .jar 文件拖放到我的 Eclipse 项目中,而不必处理 Maven 或 sbt 或其中任何一个。我一直在研究的其他一些库似乎需要大量基础架构才能将它们合并到项目中。
    • 嗯,不知怎的,我的印象是 Play 是适当模块化的,但似乎我错了
    • Jerkson 和 spray-json 看起来都很好,但我不知道如何将它们合并到我的 Eclipse 项目中——我能找到下载的唯一 jar 文件是 Maven 构建工件,显然不是普通的罐子。
    • 您确实想使用 SBT 为您获取依赖项。如果您绝对不想,您可以从here 下载用于Scala 2.10 的spray-json,从herehere 下载parboiled lib 的2 个文件(spray-json 需要)。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2019-06-11
    • 2022-12-14
    • 1970-01-01
    • 2011-08-14
    • 2012-11-23
    • 2019-02-03
    相关资源
    最近更新 更多