Java IO操作 序列化和反序列化
序列化:把一个Java对象转成字节流 反序列化:从字节流中恢复一个Java对象
什么时候用到序列化和反序列化:当需要把一个Java对象 存入计算机硬盘 或者传输到 其他计算机,就会以字节流的方式来保存或者传输。
如何实现序列化:把要序列化的对象实现Serializable接口。
实现了Serializable的对象可以被序列化和反序列化,比如下面的Student类 实现了Serializable接口,是可以被序列化的类。
import java.io.Serializable;
public class Student implements Serializable{
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
}
把Student对象序列化到文件中 ,再从文件中把 内容反序列化为一个Student对象。
使用OutputStream的实现类ObjectOutputStream类 InputStream的实现类ObjectInputStream类
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import org.junit.Test;
public class TestCotroller {
@Test
public void TestSerializable() throws IOException {
Student student = new Student();
student.setId(2);
student.setName("za");
// 1.创建文件
File file = new File("D:/xml/file/test.txt");
// 2.打开流
FileOutputStream fileOutputStream = new FileOutputStream(file);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
// 3.写入流 把对象通过序列化的方法写入流
objectOutputStream.writeObject(student);
// 4.关闭流
objectOutputStream.close();
fileOutputStream.close();
}
@Test
public void test() throws IOException, ClassNotFoundException {
// 1.创建文件
File file = new File("D:/xml/file/test.txt");
// 2.打开流
FileInputStream fileInputStream = new FileInputStream(file);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
// 3.读入流 把输入流里的内容读入 并反序列化为一个对象
Student student = (Student) objectInputStream.readObject();
System.out.println(student.toString());
// 4.关闭流
objectInputStream.close();
fileInputStream.close();
}
}
控制台输出:Student [id=2, name=za]