- 序列化的作用?
答:我们若是想将对象进行持久化,或进行网络传输就可以使用序列化技术,即将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 {
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"));
Demo demo2 = (Demo) ois.readObject();
- 当我们只想对部分属性进行序列化与反序列化,我们可以做如下操作
1.使用transient修饰符,该成员变量不进行序列化
如:private transient String name;
2.使用static修饰符,该成员变量不进行序列化
如:private static String name;
3.在被序列化的类里编写writeObject和readObject方法
原因:
当你使用ObjectOutputStream或ObjectInputStream进行序列化与反序列化时,
jvm会先看看你是否自定义了这两个方法,若是你定义了,则调用自定义方法。
案例:
private void writeObject(java.io.ObjectOutputStream oos){
oos.writeObject(name);
oos.writeObject(age);
}
private void readObject(java.io.ObjectInputStream ois){
this.name = (String) ois.readObject();
}
注意:需是private void
- 序列化的用途非常广泛,像SSM,alibaba的dubbo等很多框架底层都用到了该技术。