java对象序列化与反序列化

来源:互联网 发布:苹果打击垫软件 编辑:程序博客网 时间:2024/06/08 11:17

序列化与反序列化的概念

序列化:把对象转换为字节序列的过程
反序列化:把字节序列恢复为对象的过程


对象序列化主要用途

1:把内存中的对象保存到硬盘中的一个文件或数据库中;

2:利用套接字在网络上传送对象的字节序列;

3:通过RMI传输对象。

实现

利用JDK类库中的序列化API。其中,

      对象序列化步骤大致如下:
  1) 创建一个对象输出流ObjectOutputStream,它可以包装一个其他类型的目标输出流,比如文件输出流FileInputStream;
  2) 通过对象输出流的writeObject()方法写对象。writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
  对象反序列化的步骤大致如下:
  1) 创建一个对象输入流ObjectInputStream,它可以包装一个其他类型的源输入流,比如文件输入流FileInputStream;
  2) 通过对象输入流的readObject()方法读取对象。readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。

import java.io.*;public class AccountSerializable {    public static void main(String[] args)throws Exception {        // 相对路径,也可以写绝对路径        File f = new File("objectFile.obj");          // serialization        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f));        Account Account1 = new Account("Zhang3", 1000);        Account Account2 = new Account("Li4", 2000);        out.writeObject(Account1);        out.writeObject(Account2);        out.close();                // deserialization        ObjectInputStream in = new ObjectInputStream(new FileInputStream(f));        Account obj1 = (Account)in.readObject();        System.out.println("Account1=" + obj1);        Account obj2 = (Account)in.readObject();        System.out.println("Account2=" + obj2);        in.close();    }}// 实现Serializable接口class Account implements Serializable {    private String name;    private double balance;    public Account(String name, double balance) {        this.name = name;        this.balance = balance;    }    public String toString() {        return "name=" + name + ", balance=" + balance;    }}

运行结果:






0 0
原创粉丝点击