序列化与反序列化初步运用【java】

本文深入探讨了Java序列化的作用,包括对象持久化和网络传输。通过实例展示了如何实现序列化和反序列化,并解释了如何处理部分属性的序列化。此外,还介绍了使用`transient`和`static`关键字避免序列化,以及自定义`writeObject`和`readObject`方法来控制序列化过程。最后,强调了序列化在SSM和dubbo等框架中的广泛应用。
摘要由CSDN通过智能技术生成
  • 序列化的作用?
    答:我们若是想将对象进行持久化,或进行网络传输就可以使用序列化技术,即将java对象转换为字节序列进行保存或传输。
  • java序列化非常简单,以下是实现案例
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d://a.txt"));
Demo demo = new Demo();
demo.setName("abc");
oos.writeObject(demo);
oos.close();


class Demo implements Serializable { 
//注意必须实现Serializable 接口,打上该标记,表示可以被序列化。
//并且类中的成员变量也需实现该接口。
	private String name;
	
	public String get(){
		return this.name;
	}
	public void set(String name){
		this.name = name;
	}
}
  • 反序列化就是将字节序列恢复为对象,得到的对象与序列化之前一致
  • 反序列化案例
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d://a.txt"));
//需注意序列化和反序列化时的对象必须是同包同名属性一致
//若是不同包会出现ClassNotFound异常,即类找不到无法反序列化。
Demo demo2 = (Demo) ois.readObject();
  • 当我们只想对部分属性进行序列化与反序列化,我们可以做如下操作
1.使用transient修饰符,该成员变量不进行序列化
如:private transient String name;

2.使用static修饰符,该成员变量不进行序列化
如:private static String name;

3.在被序列化的类里编写writeObject和readObject方法
原因:
当你使用ObjectOutputStreamObjectInputStream进行序列化与反序列化时,
jvm会先看看你是否自定义了这两个方法,若是你定义了,则调用自定义方法。
案例:
private void writeObject(java.io.ObjectOutputStream oos){
//以下我对name和age这两个属性进行了序列化
	oos.writeObject(name);
	oos.writeObject(age);
}
private void readObject(java.io.ObjectInputStream ois){
//以下我只对name属性进行了反序列化
	this.name = (String) ois.readObject();
}
注意:需是private void
  • 序列化的用途非常广泛,像SSM,alibaba的dubbo等很多框架底层都用到了该技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值