序列化与反序列化
概念:
序列化:把对象以及相关信息转成字节数组,存储到硬盘上(持久化)
反序列化:把字节数转成对应的对象
注意:
1.类实现Serializable产生的对象才能做序列化
2.如果属性被static/transition修饰不会被序列化过去
3.serialVersionUID—序列化版本号
在序列化之前会根据类里的属性和方法来计算出一个版本号,这个版本号会随着对象一起序列化过去,进行反序列化之前会再次根据类里的属性和方法计算出一个新的版本号,根据原来的版本号和新版本号进行比对,如果相等就反序列化成功,如果不相等就反序列化失败(提供private static final long修饰的版本号,Java就不会计算版本号前后用的都是一个指定的版本号)
4.集合对象和映射对象都不能直接进行序列化,只能一次遍历元素对象一一进行序列化
package cn.tedu.buffer;
import java.io.Serializable;
//类实现Serializable--产生的对象才能做序列化
public class Person implements Serializable {
//java自动提供的序列化版本号
private static final long serialVersionUID=-5200286580088662553L;
//提供版本号--java就不再计算版本号
//private static final long serialVersionUID=78653251843L;
//属性
private String name;
private int age;
//属性会被序列化过去
//private char gender;
//transient---强制属性不被序列化过去
transient double weight;
//静态属性--不会被序列化过去
private static String classroom;
//方法不会被序列化获取
//public void m(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
序列化:把对象以及相关信息转成字节数组,存储到硬盘上(持久化)
package cn.tedu.buffer;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class ObjectOutputStreamDemo {
public static void main(String[] args) throws IOException {
//创建对象
//如果路径信息没有盘符---当前工程
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("p.data"));
//提供对象
Person p=new Person();
p.setName("豆豆");
p.setAge(14);
//把对象转成字节数组进行序列化
oos.writeObject(p);
//关流
oos.close();
}
}
反序列化:把字节数转成对应的对象
package cn.tedu.buffer;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
public class ObjectInputStreamDemo {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//创建对象
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("p.data"));
//读取字节数组转成对应对象---反序列化
Person p=(Person) ois.readObject();
//关流
ois.close();
//展示信息
System.out.println(p.getName()+","+p.getAge());
}
}
353

被折叠的 条评论
为什么被折叠?



