Сериализация

В целях возможности разработки приложений парами (desktop-приложение и web-приложение, функционально не отличающиеся) решил использовать дополнительный слой в модели: веб-сервисы. Начал с технологии SOAP, которая по спецификации не предусматривает возможность пересылки объектов каких-то своих хитрых классов (custom classes).

На помощь пришли два класса XMLEncoder и XMLDecoder, которые позволяют записывать в и читать из XML экземпляры классов, которые имеют доступный конструктор без аргументов и геттеры/сеттеры для всех полей, значения которых необходимы для восстановления объекта.

Ниже приведу свой вспомогательный класс со статическими шаблонными методами, позволяющими перегонять объект в байт-массив, который разрешено по спецификации SOAP пересылать, и обратно.

import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
public class Serializer {
    public static <T> byte[] toByte(T t) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        XMLEncoder e = new XMLEncoder(new BufferedOutputStream(baos));
        e.writeObject(t);
        e.close();
        return baos.toByteArray();
    }
    public static <T> T fromByte(byte[] bytes){
        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
        return (T) new XMLDecoder(bais).readObject();
    }
}

Запись опубликована в рубрике Интересности, Работа с метками , , , . Добавьте в закладки постоянную ссылку.

Один комментарий: Сериализация

  1. StarGates говорит:

    Использование технолдогии XMLEncoder XMLdecoder это хорошо,
    Но она обладает, даже на первый взгляд рядом недостатков. И, соответсвенно, ограничений.
    Это.
    1. Обязательное наличие конструктора по умолчанию.
    2. Работа только с данными через геттеры и сеттеры.
    3. Не уверен, но кажется недьзя просто так сохранять списки,
    4.Неизвестно как поведет себя программа при вычитке старых данных, которые сохранены старыми исходниками, а вычитываются новыми.

    Тут нашел статью, где показан еще один взгляд на эту проблему.
    http://steammachine.narod2.ru/articles/serialization/

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Spam protection by WP Captcha-Free