我想在表示层中使用几种编码来编码应用程序层中的对象/结构,而不依赖于编码方案(例如二进制,XML等)和编程语言(Java,Javascript,PHP,C)。 / p>
一个例子是在字节流中将对象从生产者传输到使用者。 Java客户端将使用以下内容对其进行编码:
Object var = new Dog();
output.writeObject(var);
服务器将共享Dog类定义,并可以重新生成对象,如下所示:
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的内容)?任何用法示例?该项目是否包含可在运行时选择的编解码器(DER,BER,XER等)?
由于
答案 0 :(得分:1)
您可以找到几种用于ASN.1的开源和商业实现工具。这些通常包括:
ASN.1主要用于电信行业的标准化通信协议,因此商业工具对ASN.1标准和各种编码规则有很好的支持。
以下是一些入门教程甚至免费电子书:
http://www.oss.com/asn1/resources/asn1-made-simple/introduction.html
http://www.oss.com/asn1/resources/reference/asn1-reference-card.html
http://www.oss.com/asn1/resources/books-whitepapers-pubs/asn1-books.html
我知道OSS ASN.1商业工具(http://www.oss.com/asn1/products/asn1-products.html)将支持在运行时切换编码规则。
答案 1 :(得分:1)
要添加到bosonix的答案,还有http://www.obj-sys.com/处的Objective System工具。 OSS和Objective Systems的文档包括许多示例用法。
ASN.1非常适合您所寻找的内容。我知道没有其他序列化系统可以做到这么彻底。
除了一系列不同的二进制编码(从全面标记的BER一直到非常紧凑的PER),它还可以执行XML,现在也可以使用JSON编码。这些都是由国际电联很好地标准化的,因此理论上它在工具供应商,编程语言,操作系统等之间是完全可互操作的。
ASN.1还有其他重要的好处。模式语言允许您定义消息字段值或数组大小的约束。然后,生成的代码会为您检查这些内容。这比许多其他序列化要完整得多。例如,Google Protocol Buffers不允许您这样做,这意味着您必须检查手写代码中的消息字段范围(如果适用)。这很乏味,容易出错,难以维护。
执行此操作的唯一其他方法是XSD和JSON模式。然而,对于那些你不得不使用不同质量的工具来转换为源代码的人 - 我还没有看到任何适合JSON模式的工具。我不知道微软的xsd.exe是否也遵守这些限制。