您的位置:首页 > 编程语言 > Java开发

java对象序列化与反序列化

2016-09-06 10:45 267 查看
序列化与反序列化的概念



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

对象序列化主要用途

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;
}
}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息