IO流(1)—之序列化与反序列化
1.概念
序列化:把Java对象转换为字节序列的过程称为对象的序列化
反序列化:把字节序列恢复为Java对象的过程称为对象的反序列化
注:只有实现了Serializable和Externalizable接口的类的对象才能被序列化
2.作用:
对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
网络上传送对象的字节序列。
3.流:
java.io.ObjectOutputStream代表对象输出流
- writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
java.io.ObjectInputStream代表对象输入流
- writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
4.步骤:
- 首先要有一个类,一个实现Serializable和Externalizable接口的类
序列化
- 创建文件输出流FileOutputStream
- 创建对象流ObjectOutStream
- 调用writeObject(Object obj)方法把对象作为参数传进去
- 最后调用flush()和close()方法关闭流
反序列化
- 创建文件输入流FileInputStream
- 创建对象流ObjectInputStream
- 对象流引用调用方法readObject()再强转成实现Serializable和Externalizable接口的类的类型
- 输出对象的属性
5.例子
package IO;
/**
* 对象序列化和反序列化
* 想要序列化某个对象,必须实现Serializable接口,该接口用于标记该类可以序列化
*/
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class ObjectTest {
public static void main(String[] args) throws Exception{
T t = new T();
t.k = 8;
//序列化
FileOutputStream fos = new FileOutputStream("hello1.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(t);
oos.flush();
oos.close();
//反序列化
FileInputStream fis = new FileInputStream("hello1.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
T tReader = (T)ois.readObject();
System.out.println(tReader.i+" "+tReader.j+" "+tReader.k+" "+tReader.d);
}
}
class T implements Serializable{
int i = 0;
int j = 9;
double d = 2.3;
int k = 0;
}