Сериализация java.awt.geom.Area - PullRequest
       10

Сериализация java.awt.geom.Area

3 голосов
/ 15 апреля 2010

Мне нужно сериализовать объект Area (java.awt.geom.Area) в сокет. Однако он не выглядит сериализуемым. Есть ли способ сделать такую ​​вещь? Может быть, преобразовав его в другой объект?

Заранее спасибо

Ответы [ 3 ]

6 голосов
/ 21 ноября 2011

Я нашел этот обходной путь:

AffineTransform.getTranslateInstance(0,0).createTransformedShape(myArea)

В результате получается форма, которую можно сериализовать.

1 голос
/ 15 апреля 2010

Используйте XStream , чтобы легко преобразовать его в / из XML. Вам не нужен ваш объект для реализации определенных интерфейсов, и сериализация настраивается.

0 голосов
/ 29 декабря 2015

Из ответа kieste можно обойти это решение.

import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.Area;
import java.io.IOException;
import java.io.Serializable;

public class SerialArea extends Area implements Serializable {
    private static final long serialVersionUID = -3627137348463415558L;

    /**
     * New Area
     */
    public SerialArea() {}

    /**
     * New Area From Shape
     */
    public SerialArea(Shape s) {
        super(s);
    }

    /**
     * Writes object out to out.
     * @param out Output
     * @throws IOException if I/O errors occur while writing to the
     *  underlying OutputStream
     */
    private void writeObject(java.io.ObjectOutputStream out)
            throws IOException {
        out.writeObject(AffineTransform.getTranslateInstance(0, 0).
            createTransformedShape(this));
    }
    /**
     * Reads object in from in.
     * @param in Input
     * @throws IOException if I/O errors occur while writing to the
     *  underlying OutputStream
     * @throws ClassNotFoundException if the class of a serialized object
     *  could not be found.
     */
    private void readObject(java.io.ObjectInputStream in)
            throws IOException, ClassNotFoundException {
        add(new Area((Shape) in.readObject()));
    }
}
...