jdk学习之路----Serialization
序列化
在jdk中的很多io包下的类都implements Serialization,用于将兑现过序列化,序列化对象是保存实例对象,保存对象此时的状态,就是保存类中的属性,但不包括static属性。将对象序列化后保存在内存中,然后可以通过反序列化重新获得对象的数据。因而常常把类的一些信息也序列化,一般情况下,变量存放在堆中,当序列化之后就存储在内存中了
序列化常常用于两个不同的jvm中共享对象、网络通信、存储对象;
在网络通信过程中,将对象编码成字节组,这样就可以忽略jvm的不同之处或者一些操作系统的差异,进行远程 调用、通信;
需要序列化的情况有几种:
1:想要将对象的一个状态保存到文件中或者数据库中
2:想要用套接字在网络上进行通信;套接字在另一个随笔中记载
3:想要通过RMI进行传输对象;RMI是指:
序列化可以使对象的生命周期多于jvm的生命周期
* 注意:
* 序列化的时候只是会序列化对象的属相,对对象的状态进行保存,但是不会管对象的方法
* 序列化的时候,如果父类实现了序列化的接口,那么子类就隐式地实现了序列化的接口,不需要显示implements
* 对一个对象进行序列化的时候,如果这个对象中有引用其他变量,那么被引用的对象也被序列化了
* 并不是所有的对象都可以序列化的,因为:安全(private域被访问)、资源分配
code
import java.io.Serializable;
public class Person implements Serializable{
private String name;
private String sex;
private static int age = 18;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Person(String name, String sex) {
super();
this.name = name;
this.sex = sex;
}
public Person() {
super();
}
public int getAge() {
return age;
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
/***
*
* 序列化
* 序列化可以使对象的生命周期多于jvm的生命周期
* 注意:
* 序列化的时候只是会序列化对象的属相,对对象的状态进行保存,但是不会管对象的方法
* 序列化的时候,如果父类实现了序列化的接口,那么子类就隐式地实现了序列化的接口,不需要显示implements
* 对一个对象进行序列化的时候,如果这个对象中有引用其他变量,那么被引用的对象也被序列化了
* 并不是所有的对象都可以序列化的,因为:安全(private域被访问)、资源分配
*
* @author PC
*
*/
public class SerializationTest {
public static void main(String[] args) throws Exception, IOException{
Person person = new Person();
person.setName("lusy");
person.setSex("female");
Person person1 = new Person("sum","male");
File file = new File("a.txt");
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
oos.writeObject(person);
//oos.writeObject(person1);
oos.close();
ObjectInputStream ooi = new ObjectInputStream(new FileInputStream(file));
Object object = ooi.readObject();
ooi.close();
Person p =(Person) object;
System.out.println(((Person) object).getName());
System.out.println(((Person) object).getSex());
}
}

浙公网安备 33010602011771号