哪种是最有效的序列化技术,必须与语言无关

时间:2014-01-28 13:14:07

标签: c# java serialization protocol-buffers kryonet

目前我正在启动一个项目,该项目需要从.net应用程序(c#app)序列化数据,并通过网络将其传递给基于java的服务器应用程序。因此,我想知道哪种序列化机制最有效,同时必须通过java应用程序来确定服务对象。

查询:

我听说protobuf比任何其他类似xml的序列化要快得多。是否可以使用protobuf来完成上述要求?

在java中有一种新开发的名为“Kryo”的序列化框架技术,它比protobuf更有效,所以.net环境中的任何东西都必须与语言无关。

4 个答案:

答案 0 :(得分:5)

是的,protobuf与语言无关。 java版本由google提供,multiple C# implementations(如果你想在两端使用非常相似的代码,我会推荐protobuf-csharp-port,如果你喜欢.NET代码看起来像惯用的.NET,我会推荐protobuf-net) )。

Re Kryo - 我真的不知道评论,但回答“更高效”问题的唯一方法就是测试它(同样:定义效率对你意味着什么:是序列化大小?CPU时间?资源使用?或......?)。就我个人而言,我会有点怀疑它会变小,但是:有一种确定的方法可以找到:你试试吧。

我不知道Kryo是否与语言无关,但我只能看到提到的Java。

答案 1 :(得分:2)

Hessian是一种高效,二进制但与语言无关的序列化协议。

实现可用于Java,C ++,C#,Objective-C,PHP,Ruby,Javascript等。

可以在此处找到各种远程协议性能的比较:
Java Remoting: Protocol Benchmarks

答案 2 :(得分:1)

嗯..

这取决于您希望在课程应用程序之间共享的数据类型。这里简要概述了我发现的专业知识。缺点.. 您能解释一下您想要分享的数据结构类型吗?

我建议使用XML或JSON,以提供灵活性。从长远来看,其他基于二进制的序列化选项将很困难,因为,

  • 它可能会干扰不可读/不可恢复的数据..
  • 支持可能会失踪&使你自己实现读出数据将更加困难
  • XML或JSON有一个更清晰的语法,您可以轻松编写自己的包装器,如果由于某种原因所有工具都会消失 - 因为它是人类可读的

Json 是一个选项

  1. 人类可读/可编辑
  2. 可以在不事先了解架构的情况下进行解析
  3. 出色的浏览器支持
  4. 比XML简洁,但缺少"结构检查与模式"
  5. XML 以及

    1. 人类可读/可编辑
    2. 可以在不事先了解架构的情况下进行解析
    3. SOAP等标准
    4. 良好的工具支持(xsd,xslt,sax,dom等)
    5. 非常详细与JSON
    6. 然后,

      <强>的Protobuf

      1. 非常密集的数据(小输出)
      2. 难以在不知道架构的情况下进行强大的解码(数据格式内部不明确,需要架构澄清)
      3. 非常快速的处理
      4. 不适合人眼(密集二进制)

答案 3 :(得分:0)

通过契约优先方法实现通信的语言独立性。创建一个清晰简单的交换格式规范,然后在两端找到最佳工具,以帮助您遵守它。

有线格式有两种基本选择:XML和JSON。

XML具有广泛理解的Schema规范的优势,然后允许工具生成绑定代码。

JSON的优势在于可以使用任何语言“简单地”共处一种简单的格式。

关于格式的 speed 的任何陈述,这与指定平台上的现有实现紧密相关。协议没有与语言无关的速度等级