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;
}
posted @ 2017-05-09 23:19  滕鹏飞  阅读(119)  评论(0编辑  收藏  举报