IO流-ObjectInputStream--反序列化


	public static void readObj() throws  IOException, ClassNotFoundException {
		// TODO Auto-generated method stub
		//创建一个序列化对象的读取流
		ObjectInputStream ois=new ObjectInputStream(new FileInputStream("f:\\obj.object"));
		
		//readObject读取到的为一个对象,将其强转为Person对象
		Person p=(Person)ois.readObject();
		System.out.println(p.getName()+"->"+p.getAge());
                ois.close();
 }


运行结果:



Serializable接口:

     

序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该对象的类的 serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导致InvalidClassException。可序列化类可以通过声明名为 "serialVersionUID" 的字段(该字段必须是静态 (static)、最终 (final) 的long 型字段)显式声明其自己的 serialVersionUID:

可以使用此种方法在对象中创建ID号: public|private|protected   static final long serialVersionUID = 42L;

个人理解:每一个可序列化的类都有一个固定的对应的ID号,在反序列化中用于验证发送者与接受者时候对应你一致的对象


public class Person implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 9527l;
	private String name;

	private int age;
}

public transient String name;

   transient:当对象存储时,不想存入到序列化中,但又不想被静态


当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值