<span style="font-size:18px;"><span style="color:#FF0000;">import java.io.Serializable;</span>
public class Graph<X> <span style="color:#FF0000;">implements Serializable</span>
{
private static final long serialVersionUID = 1L;
// graph node
public class Node <span style="color:#FF0000;">implements Serializable</span>
{
private static final long serialVersionUID = 1L;
public X data;
public LinkedList<Edge> edges;
public Integer indegree;</span>
首先要序列化的对象必须实现Serializable接口。而且,如果要序列化的对象里面还有其他对象,那其他对象也要实现Serializable接口。
下面是序列化的程序段。
<span style="font-size:18px;">public class Clone implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
public static Object clone(Object obj) {
Object cloneObj = null;
try {
//写入字节流
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream obs = new ObjectOutputStream(out);
obs.writeObject(obj);
obs.close();
//分配内存,写入原始对象,生成新对象
ByteArrayInputStream ios = new ByteArrayInputStream(out.toByteArray());
ObjectInputStream ois = new ObjectInputStream(ios);
//返回生成的新对象
cloneObj = (Object) ois.readObject();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
return cloneObj;
}
}
</span>
需要序列化时,调用该方法,把要序列化的对象传进去。
<span style="font-size:18px;">g=(Graph<T>) Clone.clone(this);</span>
这里需要注意一点!!!!
序列化再一定程度上有点混乱。
比如,之前的对象在HashMap里面有映射。当序列化时候,因为是一个全新的对象,所以用这个对象作为Key到HashMap里面查找Value得到的将是NULL!!
因此,在有这种映射关系的代码中,使用序列化需谨慎。