Serializable接口学习

     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方法的实现,
@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方法保存对像, 它的属性必须都实现了Serializable接口,不然不能进行序列化。如果属性是集合类,可以不需要实现Serializable接口,也可以序列化。

你可能感兴趣的:(Serializable)