详解Java 对象序列化和反序列化
java程序员都了解过有关字节流字符流的使用,当时我们对于将一个对象输出到流中的操作,使用DataOutputStream流将该对象中的每个属性值逐个输出到流中,读出时相反。在我们看来这种行为实在是繁琐,尤其是在这个对象中属性值很多的时候。基于此,Java中对象的序列化机制就可以很好的解决这种操作。本篇就简单的介绍Java对象序列化,主要内容如下:
一、简洁的代码实现
在介绍对象序列化的使用方法之前,先看看我们之前是怎么存储一个对象类型的数据的。
//简单定义一个Student类
public class Student {
private String name;
private int age;
public Student(){}
public Student(String name,int age){
this.name = name;
this.age=age;
}
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
//重写toString
@Override
public String toString(){
return ("my name is:"+this.name+" age is:"+this.age);
}
}
复制代码
//main方法实现了将对象写入文件并读取出来
public static void main(String[] args) throws IOException{
DataOutputStream dot = new DataOutputStream(new FileOutputStream("hello.txt"));
Student stuW = new Student("walker",21);
//将此对象写入到文件中
dot.writeUTF(stuW.getName());
dot.writeInt(stuW.getAge());
dot.close();
//将对象从文件中读出
DataInputStream din = new DataInputStream(new FileInputStream("hello.txt"));
Student stuR = new Student();
stuR.setName(din.readUTF());
stuR.setAge(din.readInt());
din.close();
System.out.println(stuR);
}
复制代码
输出结果:my name is:walker age is:21
显然这种代码书写是繁琐的,接下来我们看看,如何使用序列化来完成保存对象的信息。
public static void main(String[] args) throws IOException, ClassNotFoundExcepti