XStream is a simple library to serialize objects to XML and back again.

  • Ease of use. A high level facade is supplied that simplifies common use cases.
  • No mappings required. Most objects can be serialized without need for specifying mappings.
  • Performance. Speed and low memory footprint are a crucial part of the design, making it suitable for large object graphs or systems with high message throughput.
  • Clean XML. No information is duplicated that can be obtained via reflection. This results in XML that is easier to read for humans and more compact than native Java serialization.
  • Requires no modifications to objects. Serializes internal fields, including private and final. Supports non-public and inner classes. Classes are not required to have default constructor.
  • Full object graph support. Duplicate references encountered in the object-model will be maintained. Supports circular references.
  • Integrates with other XML APIs. By implementing an interface, XStream can serialize directly to/from any tree structure (not just XML).
  • Customizable conversion strategies. Strategies can be registered allowing customization of how particular types are represented as XML.
  • Security framework. Fine-control about the unmarshalled types to prevent security issues with manipulated input.
  • Error messages. When an exception occurs due to malformed XML, detailed diagnostics are provided to help isolate and fix the problem.
  • Alternative output format. The modular design allows other output formats. XStream ships currently with JSON support and morphing.
  • Transport
  • Persistence
  • Configuration
  • Unit Tests

If using the enhanced mode, XStream can re-instantiate classes that do not have a default constructor. However, if using a different JVM like an old JRockit version, a JDK 1.4 or you have restrictions because of a SecurityManager, a default constructor is required.

The enhanced mode is also necessary to restore final fields for any JDK < 1.5. This implies deserialization of instances of an inner class.

Auto-detection of annotations may cause race conditions. Preprocessing annotations is safe though.

  • Download it.
  • Use it.

October 27, 2018 XStream 1.4.11.1 released

Hot fix for XStream 1.4.11: Accidental breakage of Java runtimes %lt; 8.

This maintenance release addresses again the security vulnerability CVE-2013-7285, an arbitrary execution of commands when unmarshalling for XStream instances with uninitialized security framework. Only 1.4.10 with uninitialized security framework was affected.

New future-proof method JVM.isVersion to detect major version of Java runtime (incl. Java 10) as replacement for individual JVM.isXY methods.

View the complete change log and download.

Note, the next major release 1.5 will require Java 7.

Thanks to this impressive list of contributors.

  (Redirected from Xstream) Jump to navigationJump to search

XStream Library
Developer(s)Codehaus
Initial releaseJanuary 1, 2004 (2004-01-01)
Stable release 1.4.10 / May 23, 2017 (2017-05-23)
Written inJava
Operating systemCross-platform
LicenseBSD-style license
Website

XStream is a Java library to serializeobjects to XML (or JSON) and back again.

XStream library[edit]

XStream uses reflection to discover the structure of the object graph to serialize at run time, and doesn’t require modifications to objects. It can serialize internal fields, including private and final, and supports non-public and inner classes.[1]

Object graph serialization[edit]

When serializing an object it serializes the full object graph. Duplicate references encountered in the object-model will be maintained. For example, using the following class CD

packagecom.thoughtworks.xstream;publicclassCd{privateStringid;privateCdbonusCd;Cd(Stringid,CdbonusCd){this.id=id;this.bonusCd=bonusCd;}Cd(Stringid){this.id=id;}publicStringgetId(){returnid;}publicCdgetBonusCd(){returnbonusCd;}}

and add some of these object to a list

Cdbj=newCd("basement_jaxx_singles");Cdmr=newCd("maria rita");List<Cd>order=newArrayList();order.add(mr);// adds the same cd twice (two references to the same object)order.add(bj);order.add(bj);// adds itself (cycle)order.add(order);XStreamxstream=newXStream();xstream.alias("cd",Cd.class);System.out.println(xstream.toXML(order));

If the above code is executed with XStream’s default relative references mode, it will generate the following XML:

maria ritabasement_jaxx_singlesreference=<sp../cd[2]"/>reference=".."/>

XStream is free software, distributed under a permissive, revised BSD-style licence.

Usage[edit]

Visit 1xstream.com

Fussball Live Stream kostenlos — Bundesliga in bester Qualitaet auf 1xstream.com

http://1xstream.com

Status Online
Global rank

510 599

Daily visitors1.10K
Daily pageviews1.10K
Pageviews per user1
Rating
Latest check3 days ago

Countable Data Brief

1xstream.com is tracked by us since August, 2016. Over the time it has been ranked as high as 63 949 in the world, while most of its traffic comes from Germany, where it reached as high as 2 421 position. It was hosted by Compubyte Limited.

1xstream has the lowest Google pagerank and bad results in terms of Yandex topical citation index. We found that 1xstream.com is poorly ‘socialized’ in respect to any social network. According to Siteadvisor and Google safe browsing analytics, 1xstream.com is quite a safe domain with no visitor reviews.

Worldwide Audience

1xstream.com gets 100% of its traffic from Germany where it is ranked #15661.

Compare it to …

Top Countries

100.0%

Top Ranks

15 661

Traffic Analysis

1xstream.com has 1.10K visitors and 1.10K pageviews daily.

Compare it to …

Pageviews

Similar Traffic Stats

rankvisitors / pageviews

510597

iiab.me

2.19K / 4.38K

510598

extendsclass.com

11.0K / 11.0K

510599

1xstream.com

1.10K / 1.10K

510600

oo.com.au

1.02K / 7.12K

510601

amfm247.com

521 / 1.56K

Subdomains Traffic Shares

1xstream.com has no subdomains with considerable traffic.

SEO Stats

1xstream.com is not yet effective in its SEO tactics: it has Google PR 0. It may also be penalized or lacking valuable inbound links.

Compare it to …

Ranks

Google PR

Yandex CY

Homepage Top BacklinksPR
bundesliga-livestream.net2
superapp.bplaced.net
fussball-gucken.de

Metadata Updates

Get more 1xstream.com metadata updates

Top Keywords

% of search traffic

1xstream13.58%
bundesliga stream6.03%
fußball live stream ru3.84%
bundesliga live stream free deutsch3.67%
fussball live stream seiten kostenlos3.65%

Domain Registration Data

1xstream.com domain is owned by DomainPrivacyProtect.info Domain Robot Ltd. and its registration expires in 1 year.

Compare it to …

General

Get more 1xstream.com whois history

  • DomainPrivacyProtect.info Domain Robot Ltd.

    Owner since August 02, 2016

  • 1 year ago

    Expires on June 27, 2018

  • 3 years old

    Created on June 27, 2016

  • 2 years ago

    Changed at March 30, 2017

Registrar and Status

Registar

INWX GmbH & Co. KG

Sponsor

INWX GmbH & Co. KG

Status

clientTransferProhibited

In Other TLDs

Функционал:

Интерфейс, наконец-то, не выглядит так, будто разработчик сделал все “на коленке”, а в уже привычном “материальном” дизайне. Никакого множества вкладок или меню. Все каналы отображаются на главном экране в виде плиток, каждая из которых содержит логотип канала и его название. Для просмотра разработчик настоятельно рекомендует установить MXPlayer, дабы избежать каких-либо проблем с аудио или видео, но при этом другие пользователи уже тестировали на некоторых других плеерах и работоспособность была где-то примерно 50/50. Кстати, если у вас приложение или трансляция закрывается автоматически через определенное время, просто попробуйте выбрать другой поток для канала, а для этого достаточно удерживать палец на нужном канале, а после выбрать другой поток. Все категории были спрятаны на боковой панели.

Итоги:

Каких-либо настроек на текущий момент нет, но в дальнейшем они, возможно, появятся. Подведем итоги: просмотр такого большого количества каналов и без оплаты возможно только вместе с X-Stream TV. Приятного пользования!

Скачать X-Stream TV для Android:

Скачать apk1,14 Mb Скачиваний: 19564 Похожие приложения Stream TV ТВ Онлайн Online TV SeeTV Онлайн ТВ Сеть Ace Stream Engine VK Stream Ace Stream Media GoWeb TV IPTVFree Online TV MyTV Оставить комментарий к программе X-Stream TV Существует множество способов сериализовать Java-объект в xml и, соответственно, десериализовать. В Java SDK входят Java Architecture for XML Binding (JAXB) и связка XMLEncoderXMLDecoder. Существует так же ряд сторонних библиотек, предназначенных для решения данной задачи.Одной из таких библиотек является xstream (скачать можно отсюда). Понравилась она мне своей простотой изучения и довольно приличными возможностями, которые при этом широко расширяемы и кастомизируемы. Впрочем, обо всем по-порядку.Введение в xstreamНа официальном сайте xstream находится официальный «2-х минутный туториал». И, действительно, первое приложение с использованием xstream можно написать за 2 минуты. Давайте попробуем. Сначала создадим класс, который мы будем сериализовать: package org.beq.xstream.demo; publicclass SerializableClass {    publicstaticfinalString cons = «100»;        publicstaticfinalint coni = 100;     privateint intfield;        privatedouble doublefield;       public SerializableClass(int intfield, double doublefield){        this.intfield = intfield;         this.doublefield = doublefield;             }    publicstaticint getConi(){        return coni;     }    publicstaticString getCons(){        return cons;     }      publicdouble getDoublefield(){        return doublefield;     }    publicint getIntfield(){        return intfield;     }} Как видим, класс содержит 2 константы, переменную типа int, переменную типа double и гетеры, которые пригодятся при демонтрации механизм сериализации.Теперь займемся классом, который будет демонстрировать механизм сериализации /десериализации с помощью xstream. package org.beq.xstream.demo;import com.thoughtworks.xstream.XStream;publicclass Demo {      publicstaticvoid main(String[] args){      XStream xstream = new XStream(); // require XPP3 library      xstream.alias(«serializableclass»,  SerializableClass.class);           // Serialize      SerializableClass sclassOut = new SerializableClass(100, 100.0);      String xml = xstream.toXML(sclassOut);      System.out.println(xml);       // Deserialize      SerializableClass sclassIn = (SerializableClass) xstream.fromXML(xml);      System.out.println(«sclassOut == sclassIn: « + (sclassOut == sclassIn));      System.out.println(«sclassOut.intfield == sclassIn.intfield: « + (sclassOut.getIntfield() == sclassIn.getIntfield()));      System.out.println(«sclassOut.doublefield == sclassIn.doublefield: « + (sclassOut.getDoublefield() == sclassIn.getDoublefield()));   }} Разберем метод main подробнее. Сначала создается экземпляр потока xstream. Конструктор класса XStream в качестве параметра принимает объект, через который будет происходить обработка XML. По умолчанию это — библиотека XPP3.Далее создаем алиас для класса SerializableClass. Если не создать алиас, то содержимое класса (его поля) будет помещено в тег org.beq.xstream.demo.SerializableClass, что не красиво. Про алиасы мы еще поговорим подробнее.Следующий код: // SerializeSerializableClass sclassOut = new SerializableClass(100, 100.0);String xml = xstream.toXML(sclassOut);System.out.println(xml); Здесь мы создаем экземпляр класса, который будем сериализовать. После чего сериализуем его в XML-строку и выводим ее пользователю. Ничего сложного здесь нет.Десериализация осуществляется следующим образом: // Deserialize SerializableClass sclassIn = (SerializableClass) xstream.fromXML(xml); Я думаю, что комментировать здесь нечего. Теперь надо сравнить поля объекта до сериализации и после десериализации: System.out.println(«sclassOut == sclassIn: » + (sclassOut == sclassIn));System.out.println(«sclassOut.intfield == sclassIn.intfield: » + (sclassOut.getIntfield() == sclassIn.getIntfield()));System.out.println(«sclassOut.doublefield == sclassIn.doublefield: » + (sclassOut.getDoublefield() == sclassIn.getDoublefield())); Первое сравнение всегда будет false — объект, записаный в стрим и прочитанный оттуда — это разные объекты. Вторая и третья проверки должны вернуть true.Возможности и особенности xstreamСериализация с помощью xstream обладает рядом интересных особенностей и возможностей:

    Сериализуемые классы не обязаны реализовывать интерфейс Serializable.Поля с модификатором transient не сериализуются.

Настройка структуры XML-документаГлавным преимуществом xstream является возможность настроить структуру XML-документа, получаемого в результате сериализации. Так же данная возможность очень удобна, если мы десериализуем чужой XML-документ. Существует 2 основных способа настройки: вызов соответствующих методов класса XStream и использование аннотаций в сериализуемом классе. Давайте рассмотрим каждый способ подробнее.Настройка вызовом методов.Способ имеет ряд недостатков, но является единственно возможным при использовании JDK версий ниже 5-й. Суть заключается в том, что класс XStream имеет ряд методов для управления так называемыми алиасами. Можно создать алиас к классу, убирать те или иные теги, заставлять поля сериализоваться в атрибуты XML-документа (по умолчанию сериализация ведется в теги).Расмотрим основные алиас-методы. Описание остальных всегда можно найти в JavaDoc. xstream.alias(«email», Email.class); Метод alias создает алиас для класса. По умолчанию класс сериализуется в тег, имя которого равно полному имени сериализуемого класса, например org.beq.xstream.collection.entity.Email, что не добавляет красоты и читабельности XML-документу. После алиаса же класс будет сериализоваться в теги email. Можно также создавать алиасы для тех или иных полей класса, но это менее критично.По умолчанию поля, которые являются коллекциями, обрамляются тегом с названием поля, например . Это не всегда удобно, иногда хочется чтобы элементы коллекции находились непосредственно в рут-ноде XML-документа. Убрать обрамляющий тег можно с помощью: xstream.addImplicitCollection(Person.class, «emails»); Собственно, данную команду можно применять к любому полю объектного типа.Ну и наиболее интересная возможность — сериализация полей в атрибуты XML-документа. Чтобы то или иное поле сериализовалось атрибутом, достаточно вызвать следующую команду: xstream.useAttributeFor(Person.class, «name»); Управление сериализацией с помощью аннотацийВторым и на мой взгляд самым удобным способом управления сериализацией является использование аннотаций в сериализуемом классе. Действительно, гораздо удобнее, когда инструкции о том, как сериализовать класс, находятся в самом классе, а не у сериализатора и десериализатора. Во-первых, такой код проще читать и понимать, а во-вторых становится ненужным дублирование кода. Давайте рассмотрим, как с помощью аннотаций управлять процессом: package org.beq.xstream.annotation.entity;import java.util.List;import com.thoughtworks.xstream.annotations.XStreamAlias;import com.thoughtworks.xstream.annotations.XStreamAsAttribute;import com.thoughtworks.xstream.annotations.XStreamImplicit;@XStreamAlias(«person»)publicclass Person {   @XStreamAsAtribute   privateLong id;   @XStreamAsAttribute   privateString name;   @XStreamAsAttribute   @XStreamAlias(«family»)   privateString sername;   @XStreamImplicit(itemFieldName=«e-mail»)   privateList emails;   public Person(){   }   public Person(Long id, String name, String sername){       this.id = id;       this.name = name;       this.sername = sername;   }   publicList getEmails(){       return emails;   }   publicvoid setEmails(List emails){       this.emails = emails;   }   publicLong getId(){       return id;   }   publicvoid setId(Long id){       this.id = id;   }   publicString getName(){       return name;   }   publicvoid setName(String name){       this.name = name;   }   publicString getSername(){       return sername;   }   publicvoid setSername(String sername){       this.sername = sername;   }} Логично, что все аннотации xstream начинаются с префикса @XStream. Используемые в приведенном фрагменте аннотации обозначают следующее:

    @XStreamAlias(«person») — аналогично методу alias. Теперь класс Person будет сериализоваться в XML-тег person.@XStreamAsAttribute — как видно из названия, указывает сериализовать поле не в XML-тег, а в XML-атрибут. В данном случае тега person.@XStreamImplicit(itemFieldName=»e-mail») — убираем обрамляющий тег emails. Теперь каждый элемент коллекции emails будет сериализовываться в тег e-mail.

О других аннотациях можно прочитать в документации.Но, чтобы мета-данные, заданные с помощью аннотаций, применились, необходимо при сераилизации/десериализации вызвать методы: // Конфигурим аннотациямиAnnotations.configureAliases(xstream, Person.class);Annotations.configureAliases(xstream, Email.class); где xstream — экземпляр класса XStream, через который будет осуществляться работа.Так, с конфигурированием закончили. Рассмотрим еще довольно интересную тему — сериализацию в JSON.Сериализация в JSONJSONJava Script Object Notattion — формат, который как и XML-очень удобен для определения иерархических структур, в частности объектов. Особенно популярен такой формат для осуществления AJAX-взаимодействия. А т.к. он является нативным для JavaScript — работать с ним на клиентской стороне гораздо проще, чем с XML.Библиотека xstream поддерживает сериализацию Java-объектов в JSON. Для работы с данным форматом существует два драйвера: и JettisonMappedXmlDriver. Первый драйвер похуже, т.к. во-первых не включен в базовую поставку xstream, а во-вторых — не поддерживает десериализацию из JSON.Второй драйвер включен в поставку xstream и поддерживает, как сериализацию, так и десериализацию. Самое главное — чтобы работать с JSON вместо XML — достаточно в конструкторе XStream передать параметром экзепляр драйвера. XStream xstream = new XStream(new JettisonMappedXmlDriver()); И ву-а-ля, теперь весь вывод идет в формат JSON, например в такие строки: {«product»:{«name»:«Banana»,«id»:«123»,«price»:«23.0»}} Остальная работа полностью аналогична сериализации-десериализации в XML.Сериализация/десериализация объектов через потоки ввода-выводаUPD: В комментариях задали вопрос — как сериализовать коллекции объектов с помощью XStream. Я решил ответить на этот довольно интересный вопрос прямо в постеДля сериализации/десериализации коллекций с помощью XStream можно использовать стандартные средства java.io: ObjectOutputStream и ObjectInputStream соответственно.Давайте рассмотрим пример сериализации/десериализации коллекции объектов, которые в свою очередь тоже содержат коллекции. Этакий стресс-тест. Думаю, что для получения максимального представления о работе XStream с коллекциями, не стоит производить настройку сериализации.Итак, сначала код сериализуемого класса: packageorg.beq.xstream.demo;importjava.util.ArrayList;importjava.util.Collection;publicclass MyClass {    private Collection<Double> _doubles = new ArrayList<Double>();    public MyClass(){}    public MyClass(Collection<Double> doubles)    {        _doubles = doubles;    }    publicvoid addDouble(Double doubl)    {        _doubles.add(doubl);    }    @Override    publicString toString()    {        return«MyClass [_doubles=» + _doubles + «]»;    }}  Здесь нет ничего сложного — обычный POJO, в котором мы переопределили метод toString, чтобы потом было легко посмотреть результат десериализации.Гораздо интереснее, как мы будем работать с этим классом: packageorg.beq.xstream.demo;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.EOFException;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.io.OutputStreamWriter;importjava.util.ArrayList;importjava.util.Collection;importjava.util.List;importcom.thoughtworks.xstream.XStream;importcom.thoughtworks.xstream.io.xml.Dom4JDriver;publicclass Main{    publicstaticvoid main(String[] args)    {        try        {            XStream xoutstream = new XStream();            BufferedWriter writer = newBufferedWriter(newOutputStreamWriter(newFileOutputStream(«myfile.xml»)));            ObjectOutputStream out = xoutstream.createObjectOutputStream(writer, «rootnode»);            // Create collection            List<MyClass> lst = new ArrayList<MyClass>();            for(int i = ; i <10; i++)                lst.add(new MyClass(generateCollection()));            // Serialize collection            for(MyClass obj: lst)                out.writeObject(obj);            out.close();            XStream xinstream = new XStream(new Dom4JDriver());            BufferedReader reader = newBufferedReader(newInputStreamReader(newFileInputStream(«myfile.xml»)));            ObjectInputStream in = xinstream.createObjectInputStream(reader);            try            {                while(true)                {                    MyClass obj = (MyClass) in.readObject();                    System.out.println(obj);                }            }            catch(EOFException e)            {                System.out.println(«Everythings readed!»);            }        }        catch(FileNotFoundException e)        {            System.out.println(«could not open file: myfile.xml»);        }        catch(IOException e)        {            System.out.println(«could not write to file: myfile.xml»);        }        catch(ClassNotFoundException e)        {            System.out.println(«Class not found»);        }    }    privatestatic Collection<Double> generateCollection()    {        Collection<Double> result = new ArrayList<Double>();        for(int i = ; i <10; i++)            result.add(Math.random());        return result;    }}  Прежде всего следует понять, зачем используется два объекта класса XStream. Дело в том, что сериализовать через ObjectOutputStreamXStream может и через стандартный драйвер, а вот десериализовать — увы. Чтобы десериализовать коллекцию объектов необходимо использовать драйвер, основаный на DOM, например Dom4JDriver. Кстати, не забудьте подключить сам Dom4J. Далее необходимо помнить, что поток на запись необходимо закрыть. Иначе данные будут кэшироваться, но в файл могут не записаться. Впрочем, это относится не столько к XStream, сколько к общему пониманию процессов ввода-вывода.Важный вопрос, который возникает при десериализации: как определить, что поток прочитан полностью и больше объектов нет? Очень просто — при попытке чтения из пустого потока будет брошен EOFException, который можно перехватить и надлежащим образом обработать.ЗаключениеВот собственно и все, что я хотел рассказать о библиотеке xstream. Несмотря на довольно большие возможности, библиотека необычайно мощна, гибко настраиваема и проста для изучения. Лично у меня ушло всего 3 часа, чтобы освоить ее базовые возможности, которые я перечислил в данной статье. За кадром осталось написание своих ValueConverter’ов, реализация маршалинга-демаршалинга, кастомизация и многое другое. Но данные темы можно найти на сайте библиотеки, а ответы на многие вопросы в faq.Понравилось сообщение — подпишись на блог через RSS

ОСТАВЬТЕ ОТВЕТ

Войти с помощью: 
Please enter your name here
Please enter your comment!