Java对象的序列化都必须实现Serializable接口,所谓的序列化就是把对象序列化之后保存在文件里面,比如d:\1.txt里面,它里面保存的是属性。反序列化就是直接读取文件里面的属性。
话不多说,直接看个例子:
import java.io.Serializable;
public class Student implements Serializable{//实现序列化接口
private static final long serialVersionUID = 1L;//JDK的版本不统一,统一JDK序列化的版本
private String name;
private int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
测试类:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
public class Test2 {
public static void main(String[] args) throws Exception{
//对象的序列化操作
Student student=new Student("张三", 20);//实例化对象
File file=new File("D:\\B.txt");//保存的文件
OutputStream outputStream=new FileOutputStream(file);//转化为输出流
ObjectOutputStream objectOutputStream=new ObjectOutputStream(outputStream);//序列化操作流
objectOutputStream.writeObject(student);//把对象向文件里面写入
objectOutputStream.close();
outputStream.close();
//对象的反序列化操作
InputStream inputStream=new FileInputStream(file);//文件流
ObjectInputStream objectInputStream=new ObjectInputStream(inputStream);//反序列化操作流
Student s=(Student) objectInputStream.readObject();//从文件当中读取序列化的对象
System.out.println(s.getName()+","+s.getAge());//打印出内容
objectInputStream.close();
inputStream.close();
}
}
其实序列化保存的是对象的属性,读取也是读取的对象的属性,主要是
序列化:ObjectOutputStream
反序列化: ObjectInputStream
一般对象我们不推荐序列化,因为到目前为止,Serializable接口只是个标识接口,里面没有任何的方法。一旦jdk升级,以前写的代码都要改,很麻烦。