我需要在套接字中序列化一个Area对象(java.awt.geom.Area)。但它似乎不是可序列化的。有没有办法做这样的事情?也许通过将其转换为不同的对象?
提前致谢
答案 0 :(得分:6)
我发现了这个解决方法:
AffineTransform.getTranslateInstance(0,0).createTransformedShape(myArea)
这会产生可以序列化的形状。
答案 1 :(得分:1)
使用XStream将其转换为XML或从XML转换。您不需要对象来实现特定接口,并且可以自定义序列化。
答案 2 :(得分:0)
根据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()));
}
}
答案 3 :(得分:0)
由于Java 1.6似乎有一种更正式的方式来做到这一点。
所有您需要做的就是将Area
对象转换为Path2D.Double
对象(即Path2D.Float
)及其相应的Serializable
对象方法,同时还要考虑到施工时(甚至更晚的时候,存在相应的二传手)的绕线规则。
要从append
转换为Path2D.Double
,只需使用Area
的构造函数,该构造函数接受Area
。
Shape