【发布时间】:2016-06-05 16:02:33
【问题描述】:
我想在表示层中使用几种编码来编码应用层中的对象/结构,独立于编码方案(例如二进制、XML 等)和编程语言(Java、Javascript、PHP、C)。
例如,将对象以字节流的形式从生产者传输到消费者。 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
我发现了什么:
- Java 序列化:它取决于语言。不能与例如 javascript 一起使用。
- Protobuf 库:仅限于特定的二进制格式。无法支持其他二进制格式。需要类名(消息的“类”)。
- XStream、Simple 等。它们仅限于 text/XML 并且需要类的名称。
- ASN.1:标准已经存在,可以与 OBJECT IDENTIFIER 和类型定义一起使用,但缺乏文档和教程。
我更喜欢第四个选项,因为它是一个标准。是否有任何支持此类要求的活动项目(特别是基于 ASN.1 的项目)?有使用示例吗?项目是否包含可在运行时选择的编解码器(DER、BER、XER 等)?
谢谢
【问题讨论】:
标签: serialization xstream asn.1 protocol-buffers