我可以使用 Protobuf-net 对已用 Java 序列化的数据进行反序列化吗?
Posted
技术标签:
【中文标题】我可以使用 Protobuf-net 对已用 Java 序列化的数据进行反序列化吗?【英文标题】:Can I use Protobuf-net to deserilaze data which has been serialized in Java? 【发布时间】:2014-09-16 00:49:49 【问题描述】:我们有一个基于 Java 的 WebSocket,它当前返回 JSON,然后我们在 .Net 应用程序中使用它。由于我们收到的数据的大小,我想开始利用 Protocol Buffers 在大小/带宽方面特别提供的所有优点,以及在序列化和反序列化期间节省双方的时间/资源。
我的问题是:
如果我要求我们的 Java 团队将他们的 JSON 序列化程序替换为 Protobuf 的 Java 实现,那么我是否可以在我的 .Net 使用者中使用 Protobuf-net 来反序列化它?
换句话说,我如何确保我的 POCO 与他们的 POJO 匹配!?
[*]: 请注意,这不是关于不同 JSON 序列化程序的性能优势的问题,它特定于 Protobufs。
【问题讨论】:
【参考方案1】:是的,绝对的。
协议缓冲区被设计为与语言无关。事实上,它们的主要用途之一是在运行不同堆栈的机器之间进行通信。
在网络上,协议缓冲区与 XML 或 JSON 没有什么不同。因为它们是独立于语言的。
要反序列化,您应该使用 Google 机器生成的代码,用于 .Net 和 Java。这将确保您的协议缓冲区正确反序列化。
【讨论】:
附带说明:使用 protobuf-net 特别是,使用机器生成的代码并不是绝对必要的 - 尽管有 .proto-to-csharp 代码生成器。以上是关于我可以使用 Protobuf-net 对已用 Java 序列化的数据进行反序列化吗?的主要内容,如果未能解决你的问题,请参考以下文章
我可以为 Protobuf-net 设置一个全局对象工厂吗?
使用 Protobuf-net 将大数据文件流式传输为 IEnumerable
我可以为 protobuf-net WCF 使用 net.tcp 绑定吗?