4

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

查询:

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

在java中有一个新开发的技术叫做“Kryo”的序列化框架,它比protobuf效率更高,所以.net环境中有没有这样的东西必须是语言无关的。

4

4 回答 4

5

是的,protobuf 与语言无关。Java 版本由 google 提供,具有多个 C# 实现(如果您希望两端的代码非常相似,我会推荐 protobuf-csharp-port,如果您希望 .NET 代码看起来像惯用的 .NET,我会推荐 protobuf-net)。

Re Kryo - 我真的没有足够的知识发表评论,但回答“它是否更有效”问题的唯一方法是测试它(另外:定义效率对你意味着什么:序列化大小?CPU时间?资源用法?还是……?)。就个人而言,我有点怀疑它会变小,但是:有一个确定的方法可以找到:你试试看。

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

于 2014-01-28T13:20:02.777 回答
2

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

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

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

于 2014-01-28T13:29:53.230 回答
1

唔..

这取决于你想在应用程序之间共享的数据类型。这是我认为优缺点的简要概述。 你能解释一下你想要共享的数据结构类型吗?

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

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

Json是一个选项

  1. 人类可读/可编辑
  2. 无需预先知道模式即可解析
  3. 优秀的浏览器支持
  4. 比 XML 更简洁,但缺少“使用模式进行结构检查”

XML也是如此

  1. 人类可读/可编辑
  2. 无需预先知道模式即可解析
  3. SOAP等标准
  4. 良好的工具支持(xsd、xslt、sax、dom 等)
  5. 相当冗长 vs JSON

接着,

原型缓冲区

  1. 非常密集的数据(小输出)
  2. 在不知道架构的情况下很难稳健地解码(数据格式在内部是模棱两可的,需要架构来澄清)
  3. 处理速度非常快
  4. 不适用于人眼(密集二进制)
于 2014-01-28T13:20:23.937 回答
0

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

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

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

JSON 的优势在于是一种更简单的格式,可以在任何语言中“组合在一起”。

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

于 2014-01-28T13:21:00.053 回答