文章目录
什么是序列化
1.定义:将内存中保存的对象变为二进制数据流的形式进行传输,或者是将其保存在文本中。
2.实现:Java中类若要被序列化输出,该类必须实现Serializable接口(该接口是一个标识接口,表示该类具有序列化的功能)。
序列化与反序列化
如果要想实现序列化与反序列化的对象操作,在java.io包中提供有两个处理类:ObjectOutputStream、
ObjectInputStream
继承结构:
public class ObjectOutputStream
extends OutputStream implements ObjectOutput, ObjectStreamConstants
public class ObjectInputStream
extends InputStream implements ObjectInput, ObjectStreamConstants
构造方法:
public ObjectOutputStream(OutputStream out) throws IOException
public ObjectInputStream(InputStream in) throws IOException
将对象序列化输出方法:
public final void writeObject(Object obj) throws IOException
将对象序列化输入方法:
public final Object readObject()
throws IOException, ClassNotFoundException
范例:对象的序列化输出
import java.io.*;
import java.io.File;
import java.util.Date;
class Person implements Serializable{
private String name;
private String genter;
private int age;
public Person(String name, String genter, int age) {
this.name = name;
this.genter = genter;
this.age = age;
}
@Override
public String toString() {
return "姓名:"+name+",性别:"+genter+",年龄:"+age;
}
}
public class Test {
public static void main(String[] args)throws IOException {
File file = new File("C:Users" + File.separator + "Administrator"
+ File.separator + "Desktop" + File.separator + "Test.txt");
OutputStream out = new FileOutputStream(file);
ObjectOutputStream oos=new ObjectOutputStream(out);
Person p=new Person("HL","female",18);
oos.writeObject(p);
oos.close();
}
}
范例:对象的序列化输入(对象反序列化)
import java.io.*;
import java.io.File;
import java.util.Date;
class Person implements Serializable{
private String name;
private String genter;
private int age;
public Person(String name, String genter, int age) {
this.name = name;
this.genter = genter;
this.age = age;
}
@Override
public String toString() {
return "姓名:"+name+",性别:"+genter+",年龄:"+age;
}
}
public class Test {
public static void main(String[] args)throws Exception {
File file = new File("C:Users" + File.separator + "Administrator"
+ File.separator + "Desktop" + File.separator + "Test.txt");
InputStream in=new FileInputStream(file);
ObjectInputStream ois=new ObjectInputStream(in);
Object str;
str=ois.readObject();
System.out.println(str);//因为覆写了toString()
ois.close();
}
}
transient关键字
Serializable默认会将对象中所有属性进行序列化保存,如果现在某些属性不希望被保存了,那么就可以
使用transient关键字。
范例:transient关键字的使用
import java.io.*;
import java.io.File;
import java.util.Date;
class Person implements Serializable{
private String name;
private transient String genter;
private transient int age;
public Person(String name, String genter, int age) {
this.name = name;
this.genter = genter;
this.age = age;
}
@Override
public String toString() {
return "姓名:"+name+",性别:"+genter+",年龄:"+age;
}
}
public class Test {
public static void main(String[] args)throws Exception {
File file = new File("C:Users" + File.separator + "Administrator"
+ File.separator + "Desktop" + File.separator + "Test.txt");
//序列化输出
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(file));
Person p=new Person("HL","female",18);
oos.writeObject(p);
oos.close();
//反序列化
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file));
Object str;
str=ois.readObject();
System.out.println(str);//因为覆写了toString()
ois.close();
}
}