IO流(1)—之序列化与反序列化

来源:互联网 发布:ubuntu snmpwalk 编辑:程序博客网 时间:2024/06/05 20:33

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;}
0 0
原创粉丝点击