Object serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象。
Object serialization主要用来支持2种主要的特性:
1。Java的RMI(remote method invocation).RMI允许象在本机上一样操作远程机器上的对象。当发送消息给远程对象时,就需要用到serializaiton机制来发送参数和接收返回直。
2。Java的JavaBeans. Bean的状态信息通常是在设计时配置的。Bean的状态信息必须被存起来,以便当程序运行时能恢复这些状态信息。这也需要serializaiton机制。
如果一个类实现了Serializable,则可以进行 writeObject(java.io.ObjectOutputStream out)进行备份,之后可以通过readObject(java.io.ObjectInputStream in)用来恢复。因此可以通过这种方法进行克隆。下面是一个clone方法的实现,
这种方法进行的克隆属于深度克隆,返回的是一个全新的对像。通过Serializable方法保存对像,[color=darkblue]它的属性必须都实现了Serializable接口[/color],不然不能进行序列化。如果属性是集合类,可以不需要实现Serializable接口,也可以序列化。
Object serialization主要用来支持2种主要的特性:
1。Java的RMI(remote method invocation).RMI允许象在本机上一样操作远程机器上的对象。当发送消息给远程对象时,就需要用到serializaiton机制来发送参数和接收返回直。
2。Java的JavaBeans. Bean的状态信息通常是在设计时配置的。Bean的状态信息必须被存起来,以便当程序运行时能恢复这些状态信息。这也需要serializaiton机制。
如果一个类实现了Serializable,则可以进行 writeObject(java.io.ObjectOutputStream out)进行备份,之后可以通过readObject(java.io.ObjectInputStream in)用来恢复。因此可以通过这种方法进行克隆。下面是一个clone方法的实现,
@Override
protected Object clone() throws CloneNotSupportedException {
try {
// save the object to a byte array
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bout);
out.writeObject(this);
out.close();
// read a clone of the object from the byte array
ByteArrayInputStream bin = new ByteArrayInputStream(
bout.toByteArray());
ObjectInputStream in = new ObjectInputStream(bin);
Object ret = in.readObject();
in.close();
return ret;
} catch (Exception e) {
e.printStackTrace();
return null;
}
这种方法进行的克隆属于深度克隆,返回的是一个全新的对像。通过Serializable方法保存对像,[color=darkblue]它的属性必须都实现了Serializable接口[/color],不然不能进行序列化。如果属性是集合类,可以不需要实现Serializable接口,也可以序列化。