2016-02-23 7 views
0

Я хочу использовать несколько кодировок в слое представления для кодирования объекта/структуры в уровне приложения независимо от схемы кодирования (такой как двоичный, XML и т. Д.) И языка программирования (Java, Javascript, PHP , C).Внедрение независимого кодирования сериализации Java

Примером может быть передача объекта от производителя потребителю в потоке байтов. Клиент 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 

То, что я нашел:

  1. Java Сериализация: Это зависит от языка. Невозможно использовать, например, javascript.
  2. Protobuf library: Он ограничен конкретным двоичным форматом. Невозможно поддерживать дополнительные двоичные форматы. Нужно имя класса («класс» сообщения).
  3. XStream, Simple и т. Д. Они скорее ограничены текстом/XML и требуют названия класса.
  4. ASN.1: Стандарты существуют и могут использоваться с определениями OBJECT IDENTIFIER и типов, но им не хватает документации и учебных пособий.

Я предпочитаю 4-й вариант, потому что, среди прочего, это стандарт. Есть ли активный проект, который поддерживает такие требования (особенно что-то, основанное на ASN.1)? Любой пример использования? Включает ли проект кодеки (DER, BER, XER и т. Д.), Которые можно выбрать во время выполнения?

Благодаря

ответ

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

Чтобы добавить к ответу bosonix, есть также инструменты Objective System на http://www.obj-sys.com/. Документация как OSS, так и Objective Systems включает много примеров использования.

ASN.1 в значительной степени идеально подходит для того, что вы ищете. Я не знаю никакой другой системы сериализации, которая делает это достаточно тщательно.

Как и целый массив различных двоичных кодировок (от полностью помеченного BER до самого упакованного вместе PER), он делает XML и теперь также кодирует JSON. Они хорошо стандартизированы МСЭ, поэтому теоретически они полностью совместимы между поставщиками инструмента, языками программирования, операционными системами и т. Д.

Существуют и другие существенные преимущества для ASN.1. Язык схемы позволяет определять ограничения на значения полей сообщений или размеры массивов. Затем они проверяются для вас сгенерированным кодом. Это гораздо более полно, чем многие другие сериализации. Например, Google Protocol Buffers не позволяет вам это делать, а это означает, что вам нужно проверить диапазон полей сообщений (если применимо) в написанном вручную коде. Это утомительно, склонно к ошибкам и трудно поддерживать.

Единственные другие, которые делают это, это схемы XSD и JSON. Однако с теми, кому вы доверяете различное качество инструментов, используемых для превращения их в исходный код, я еще не видел приличных для JSON-схем. Мне неизвестно, соблюдает ли xsd.exe Microsoft такие ограничения.

 Смежные вопросы

  • Нет связанных вопросов^_^