本文借鉴很多大神的代码和思想。
1.Java对象序列化就是将Java对象变身成io流,方便在网络上传输,或存储。
2.对象的序列化有两个作用,其一就是实现对象的持久化(将在内存中短暂存在的对象,变成可以永久存储在文件中的一组字节)。其二就是将不可以在网络中传输的对象,变成可以在网络中传输的一组字节。
注意:对象的序列化保存的是对象的状态(即他的成员变量),不会关注类中的静态变量。
3.在java中,类实现了java.lang.Serializable接口只是说这个类可以被实例化,
可序列化的Person类:
package com.qf.demo;
import java.io.Serializable;
public class Person implements Serializable{
private String name=null;
private Integer age=null;
public Person(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String toString(){
return name+","+age;
}
}
将Person类序列化:
package com.qf.demo;
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.ObjectOutput;
import java.io.ObjectOutputStream;
public class SimpleSerial {
public static void main(String[] args) {
File file=new File("person.out");
try {
FileOutputStream oout=new FileOutputStream(file);
ObjectOutputStream oous=new ObjectOutputStream(oout);
Person person=new Person("zhangsan",13);
oous.writeObject(person);
oous.close();
oout.close();
FileInputStream innt=new FileInputStream(file);
ObjectInputStream inns=new ObjectInputStream(innt);
Object newPerson=inns.readObject();
inns.close();
innt.close();
System.out.println(newPerson);
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
4.如果不想类中的某个字段被序列化,可以在该字段的前面加“transient”关键字如:
public class Person implements Serializable { ...
transient private Integer age = null;
...
}