2010-04-15 5 views
3

J'ai besoin de sérialiser un objet Area (java.awt.geom.Area) dans un socket. Cependant, il ne semble pas être sérialisable. Y a-t-il un moyen de faire une telle chose? Peut-être en le convertissant en un objet différent?Sérialiser un java.awt.geom.Area

Merci à l'avance

Répondre

1

Utilisez XStream pour convertir trivialement à/de XML. Vous n'avez pas besoin de votre objet pour implémenter des interfaces particulières, et la sérialisation est personnalisable.

+0

Merci pour la réponse. Malheureusement je ne peux pas envoyer trop d'informations, donc je ne peux pas trouver de XML. – Jack

6

Je trouve cette solution de contournement:

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

Il en résulte une forme qui peut être sérialisé.

0

De la réponse de Kieste, cette solution de contournement peut être dérivée.

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())); 
    } 
}