Serialization 实现Java序列化无关编码
我想在表示层中使用几种编码来对应用层中的对象/结构进行编码,独立于编码方案(如二进制、XML等)和编程语言(Java、Javascript、PHP、C) 例如,在字节流中将对象从生产者传输到消费者。Java客户端将使用如下方式对其进行编码:Serialization 实现Java序列化无关编码,serialization,xstream,asn.1,protocol-buffers,Serialization,Xstream,Asn.1,Protocol Buffers,我想在表示层中使用几种编码来对应用层中的对象/结构进行编码,独立于编码方案(如二进制、XML等)和编程语言(Java、Javascript、PHP、C) 例如,在字节流中将对象从生产者传输到消费者。Java客户端将使用如下方式对其进行编码: Object var = new Dog(); output.writeObject(var); Object var = input.readObject(); assertTrue(var instanceof Dog); // passes 服
Object var = new Dog();
output.writeObject(var);
Object var = input.readObject();
assertTrue(var instanceof Dog); // passes
服务器将共享Dog类定义,并可以通过如下方式重新生成对象:
Object var = new Dog();
output.writeObject(var);
Object var = input.readObject();
assertTrue(var instanceof Dog); // passes
需要注意的是,生产者和消费者不会共享var的类型,因此,消费者不需要该类型来解码var。他们只会共享数据类型定义,如果有的话:
public interface Pojo {}
public class Dog implements Pojo { int i; String s; } // Generated by framework from a spec
我发现:
谢谢您可以找到几个用于ASN.1的开源和商业化工具实现。这些措施通常包括:
- 模式的编译器,它将生成所需编程语言的代码
- 与生成的代码一起用于编码和解码的运行时库
我知道OSS ASN.1商业工具()将支持在运行时切换编码规则。您可以找到几个用于ASN.1的开源和商业工具实现。这些措施通常包括:
- 模式的编译器,它将生成所需编程语言的代码
- 与生成的代码一起用于编码和解码的运行时库
我知道OSS ASN.1商业工具()将支持在运行时切换编码规则。为了补充bosonix的答案,还有Objective System的工具。OSS和Objective系统的文档都包含许多示例使用 ASN.1非常适合您所寻找的内容。据我所知,没有其他序列化系统能如此彻底地做到这一点 除了一系列不同的二进制编码(从全面标记的BER一直到打包的PER),它还可以进行XML编码,现在还可以进行JSON编码。ITU对这些标准进行了很好的标准化,因此理论上,工具供应商、编程语言、操作系统等之间完全可以互操作 ASN.1还有其他显著的好处。模式语言允许您定义消息字段值或数组大小的约束。然后由生成的代码为您检查这些。这比许多其他序列化要完整得多。例如,Google Protocol Buffers不允许您这样做,这意味着您必须检查手写代码中消息字段的范围(如果适用)。这很乏味,容易出错,而且很难维护
只有XSD和JSON模式可以做到这一点。然而,对于这些工具,您将受制于用于将它们转换为源代码的工具的不同质量——我还没有看到任何适合JSON模式的工具。我也不知道微软的xsd.exe是否遵守这些限制。为了补充bosonix的答案,还有Objective System的工具。OSS和Objective系统的文档都包含许多示例使用 ASN.1非常适合您所寻找的内容。据我所知,没有其他序列化系统能如此彻底地做到这一点 除了一系列不同的二进制编码(从全面标记的BER一直到打包的PER),它还可以进行XML编码,现在还可以进行JSON编码。ITU对这些标准进行了很好的标准化,因此理论上,工具供应商、编程语言、操作系统等之间完全可以互操作 ASN.1还有其他显著的好处。模式语言允许您定义消息字段值或数组大小的约束。然后由生成的代码为您检查这些。这比许多其他序列化要完整得多。例如,Google Protocol Buffers不允许您这样做,这意味着您必须检查手写代码中消息字段的范围(如果适用)。这很乏味,容易出错,而且很难维护 只有XSD和JSON模式可以做到这一点。然而,对于这些工具,您将受制于用于将它们转换为源代码的工具的不同质量——我还没有看到任何适合JSON模式的工具。我也不知道微软的xsd.exe是否遵守这些限制