Какая лучшая альтернатива сериализации Java?
В настоящее время я работаю над проектом, который 9X_serializing должен сохранять объекты любого типа (реализацию 9X_xml-serialization которых мы не контролируем), чтобы эти объекты 9X_serialization можно было впоследствии восстановить.
Мы 9X_unserialize не можем реализовать ORM, потому что мы 9X_deserialize не можем ограничивать пользователей нашей 9X_j2se библиотеки во время разработки.
Нашей первой 9X_openjdk альтернативой было сериализовать его с сериализацией 9X_.java по умолчанию Java, но у нас было много проблем 9X_serialized с восстановлением объектов, когда пользователи 9X_serializing начали передавать разные версии одного и 9X_unserialize того же объекта (атрибуты изменили типы, имена, ...).
Мы 9X_javax пробовали использовать класс XMLEncoder 9X_deserialize (преобразует объект в XML), но обнаружили 9X_jre недостаток функциональности (например, не 9X_jdk поддерживает Enums).
Наконец, мы также попробовали 9X_serialisation JAXB, но это заставило наших пользователей 9X_.java аннотировать свои классы.
Есть хорошая альтернатива?
- http://www.db4o.com? объектно-ориентированная база данных с открытым ис ...
Ответ #1
Ответ на вопрос: Какая лучшая альтернатива сериализации Java?
Сейчас 2011 год, и в проекте веб-сервисов 9X_jre REST коммерческого уровня мы используем 9X_java следующие сериализаторы, чтобы предложить 9X_serialized клиентам различные типы мультимедиа:
- XStream (для XML, но не для JSON)
- Jackson (для JSON)
- Kryo (быстрый и компактный формат двоичной сериализации)
- Smile (двоичный формат, входящий в состав Jackson 1.6 и более поздних версий).
- Сериализация объектов Java.
Недавно 9X_openjdk мы экспериментировали с другими сериализаторами:
- SimpleXML кажется надежным, работает в 2 раза быстрее, чем XStream, но требует слишком большой настройки для нашей ситуации.
- YamlBeans имел пару ошибок.
- SnakeYAML имел незначительную ошибку, связанную с датами.
Jackson 9X_java JSON, Kryo и Jackson Smile были значительно 9X_jre быстрее, чем старая добрая сериализация 9X_serialize объектов Java, примерно в 3–4,5 раза. XStream 9X_deserialize работает медленно. Но на данный момент все 9X_jdk это хороший выбор. Мы продолжим следить 9X_j2se за остальными тремя.
- Очень хороший набор сериализаторов. Единственное, что я могу упомянуть, это protostuff. Также: у Джексона теперь есть модуль XML (https://github.com/FasterXML/jackson-dataformat-xml), который достаточно хо ...
Ответ #2
Ответ на вопрос: Какая лучшая альтернатива сериализации Java?
http://x-stream.github.io/ красивый, пожалуйста, взгляните на него! Очень 9X_deserialize удобно
Ответ #3
Ответ на вопрос: Какая лучшая альтернатива сериализации Java?
какую реализацию мы не контролируем
Решение - не делайте этого. Если у вас нет контроля над 9X_.java реализацией типа, вам не следует его сериализовать. Конец 9X_.java истории. Сериализация Java предоставляет 9X_.java serialVersionUID специально для управления 9X_serialized несовместимостью сериализации между различными 9X_jre версиями типа. Если вы не контролируете 9X_serialization реализацию, вы не можете быть уверены, что 9X_xml-serialization идентификаторы меняются правильно, когда 9X_serializing разработчик меняет класс.
Рассмотрим простой 9X_serialized пример "точки". Он может быть представлен 9X_jre в декартовой или полярной системе координат. Для 9X_serialization вас было бы непомерно дорого построить систему, которая 9X_serialize могла бы динамически справляться с такого 9X_serialisation рода исправлениями - на самом деле это должен 9X_serialize быть разработчик класса, который проектирует 9X_openjdk сериализацию.
Короче говоря, неправильный 9X_.java дизайн, а не технология.
Ответ #4
Ответ на вопрос: Какая лучшая альтернатива сериализации Java?
Проще всего вам по-прежнему использовать 9X_serialisation сериализацию, IMO, но больше подумать о 9X_.java сериализованной форме классов (что вам действительно 9X_serialized следует делать в любом случае). Например:
- Явно определите SerialUID.
- При необходимости определите собственную сериализованную форму.
Сериализованная 9X_javax форма является частью API класса, и ее дизайн 9X_serializing следует тщательно продумать.
Я не буду вдаваться 9X_java в подробности, поскольку почти все, что 9X_j2se я сказал, взято из Effective Java. Вместо 9X_jdk этого я отсылаю вас к нему, особенно к главам 9X_java о сериализации. Он предупреждает вас обо 9X_serialized всех проблемах, с которыми вы сталкиваетесь, и 9X_deserialize предлагает правильные решения проблемы:
http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683
С 9X_deserialize учетом сказанного, если вы все еще рассматриваете 9X_serialisation подход без сериализации, вот пара:
Маршаллинг XML
Как многие 9X_jre отмечали, это вариант, но я думаю, что вы 9X_serialisation все равно столкнетесь с теми же проблемами 9X_jdk с обратной совместимостью. Однако с помощью 9X_oraclejdk маршалинга XML вы, надеюсь, сразу поймете 9X_jdk их, поскольку некоторые фреймворки могут 9X_serializing выполнять некоторые проверки во время инициализации.
Преобразование в / из YAML
Я 9X_.java долго раздумывал над этой идеей, но мне 9X_j2se очень понравился формат YAML (по крайней 9X_serializing мере, как пользовательский формат toString()). Но 9X_serializing на самом деле единственная разница для вас 9X_openjdk заключается в том, что вы будете выполнять 9X_j2se маршалинг в YAML вместо XML. Единственное 9X_oraclejdk преимущество состоит в том, что YAML немного 9X_serialized более удобочитаем, чем XML. Действуют те 9X_jre же ограничения.
Ответ #5
Ответ на вопрос: Какая лучшая альтернатива сериализации Java?
Google разработал двоичный протокол - http://code.google.com/apis/protocolbuffers/ быстрее, имеет 9X_serialization меньшую полезную нагрузку по сравнению с 9X_serialisation XML, - который другие предложили в качестве 9X_deserialize альтернативы.
Одним из преимуществ буферов 9X_java протокола является то, что он может обмениваться 9X_deserialize информацией с C, C++, python и java.
Ответ #6
Ответ на вопрос: Какая лучшая альтернатива сериализации Java?
Попробуйте сериализовать в json, например, с 9X_deserialize помощью Gson.
Ответ #7
Ответ на вопрос: Какая лучшая альтернатива сериализации Java?
Также очень быстрая замена сериализации 9X_serializing JDK: http://ruedigermoeller.github.io/fast-serialization/
Ответ #8
Ответ на вопрос: Какая лучшая альтернатива сериализации Java?
Если для вас важна скорость сериализации, то 9X_oraclejdk здесь можно найти исчерпывающий тест сериализаторов 9X_serialized JVM:
- https://github.com/eishay/jvm-serializers/wiki
Ответ #9
Ответ на вопрос: Какая лучшая альтернатива сериализации Java?
Возможно, Castor?
9X_deserialize
Ответ #10
Ответ на вопрос: Какая лучшая альтернатива сериализации Java?
Лично я часто использую Fame, поскольку он обеспечивает 9X_openjdk взаимодействие с Smalltalk (как VW, так 9X_serialisation и Squeak) и Python. (Заявление об отказе 9X_jre от ответственности, я являюсь основным участником 9X_java проекта Fame.)
Ответ #11
Ответ на вопрос: Какая лучшая альтернатива сериализации Java?
Betwixt - хорошая библиотека для сериализации объектов, но 9X_serialisation она не будет автоматической. Если количество 9X_j2se объектов, которые вам нужно сериализовать, относительно 9X_serialisation фиксировано, это может быть для вас хорошим 9X_deserialize вариантом, но если ваш «клиент» будет постоянно 9X_xml-serialization бросать вам новые классы, это может потребовать 9X_serializing больше усилий, чем оно того стоит ( Однако 9X_serialized определенно проще, чем XMLEncoder для всех 9X_javax особых случаев).
Другой подход - потребовать 9X_.java от клиента предоставить соответствующие 9X_serialisation файлы .betwixt для любых объектов, которые 9X_jre они вам бросают (что фактически снимает 9X_serializing с них ответственность).
Кратко и кратко - сериализация 9X_serializing - это сложно - к ней не существует полностью мертвого 9X_openjdk подхода. Сериализация Java - это настолько 9X_.java близкое к мертвому мозгу решение, которое 9X_j2se я когда-либо видел, но, как вы обнаружили, неправильное 9X_java использование значения uid версии может 9X_jre его нарушить. Сериализация Java также требует 9X_xml-serialization использования интерфейса «Serializable» маркера, поэтому, если 9X_java вы не можете управлять своим источником, вам 9X_serialization не повезло с этим.
Если требование действительно 9X_serializing настолько сложное, как вы описываете, вам, возможно, придется 9X_serializing прибегнуть к какой-то BCE (модификации байтового 9X_serialized кода) для объектов / аспектов / чего угодно. Это 9X_jdk выходит за рамки небольшого проекта разработки 9X_javax и попадает в сферу Hibernate, Casper или 9X_java ORM ....
-
6
-
7
-
5
-
5
-
5
-
10
-
2
-
8
-
3
-
1
-
2
-
10
-
6
-
3
-
1
-
2
-
1
-
2
-
5
-
9
-
3
-
2
-
1
-
8
-
7
-
5
-
4
-
5
-
4
-
6
-
5
-
5
-
5
-
1
-
3
-
6
-
3
-
1
-
14
-
4
-
7
-
7
-
1
-
3
-
7
-
12
-
5
-
4
-
3
-
5