序列化
序列化来源
序列化使用到的知识是I/O流中的对象流
序列化机制
序列化其实就是将java内存中的对象转换成以字节序列的形式存储在磁盘或者以网络的形式传输出去,这些字节数据包括了对象的数据和信息,这样做也是为了持久化对象,当我们在A类中要用到另外一个B类时,我们可以直接操作A类,而不用再用磁盘存储B类文件,因为B类信息已经存储到A类当中。
反序列化机制
当java内存读取序列化对象时,将这些字节序列恢复成原来的java对象
序列化方法
ObjectOutputStream
反序列化方法
ObjectInputStream
一个可以被序列化的类,需要满足以下几个要求
①需要实现序列化接口:Serializable
②为序列化类提供一个全局常量:public/private static final long serialVersionUID
③序列化类实现Serialzable接口之外,还必须保证其内部所有的属性必须是可以被序列化的(默认情况下基本数据类型都是可以被序列化的)
序列化实际操作
public class SerializableObject implements Serializable {
private String name;
private int age;
private static final long serialVersionUID=34895495457L;
Person per=new Person("张三",1);
public SerializableObject(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "SerializableObject{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
class Person implements Serializable{
String name;
int id;
private static final long serialVersionUID=2378324989L;
public Person(String name, int id) {
this.name = name;
this.id = id;
}
}
public class SerializableTest {
/**
* 序列化
* */
@Test
public void objectOutStreamTest(){
ObjectOutputStream oos=null;
try {
oos=new ObjectOutputStream(new FileOutputStream("person.bat"));
oos.writeObject(new SerializableObject("张三",17));
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 反序列化
* */
@Test
public void objectInputStreamTest(){
ObjectInputStream ois=null;
try {
ois=new ObjectInputStream(new FileInputStream("person.bat"));
SerializableObject sobject=(SerializableObject) ois.readObject();
System.out.println(sobject);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}