序列化
序列化是什么?
将对象的状态存储到特定存储介质的过程。
将Java对象转换为字节序列。
如何实现对象序列化?
实现接口serializable
实战练习:
public class BookManager {
//序列化:写入. 把对象写入二进制文件中,前提必须实现序列化接口
public static void serial(Book book){
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("D:/IoFile/serial/book.txt"));
//实现序列化
oos.writeObject(book);
System.out.println("序列化成功");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(oos!=null){
oos.flush();
oos.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//反序列化:文件--->程序 输入 把二进制文件读取成对象
public static Book unSerial(){
ObjectInputStream ois =null;
Book book = null;
try {
ois = new ObjectInputStream(new FileInputStream("D:/IoFile/serial/book.txt"));
book = (Book) ois.readObject();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(ois!=null){
ois.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return book;
}
public static void main(String[] args) {
// Book book=new Book(1, "哈利波特");
// serial(book);
Book book=unSerial();
System.out.println(book.getName());
}
}
其实体类Book类实现Serializable接口:
import java.io.Serializable;
/**
* 序列化
* 作用:把对象保存至二进制文件
* @author 爱是与世界平行
*
*/
public class Book implements Serializable{
private int id;
private String name;
public Book(int id, String name) {
super();
this.id = id;
this.name = name;
}
}
Serializable
要想实现序列化(文件写入)或者反序列化(文件读取),必须实现Serializable接口。
重写 readObject(ObjectInputStream in) 和 writeObject(ObjectOutputSteam
out) 方法,则调用这两个方法进行序列化或反序列化。带 readObject() 和 writeObject() 方法的序列化和反序列化
这两个方法可以在序列化和反序列化时定制用户的行为,即使它们被生命为private,但这丝毫不影响它们的作用。实际上,ObjectInputStream和ObjectOutputStream通过反射来寻找对象是否实现了这两个方法
反序列化
将文件中的内容读取出来。