序列化对象

对象序列化的目标是将对象保存到磁盘中,或允许在网络中直接传输对象。对象序列
化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制
流持久地保存在磁盘上,通过网络将这种二进制流传输到另一个网络节点。其他程序
一旦获得了这种二进制流(无论是从磁盘中获取的,还是通过网络获取的),都可以
将这种二进制流恢复成原来的Java对象。
序列化的含义和意义
序列化机制允许将实现序列化的Java对象转换成字节序列,这些字节序列可以保存在
磁盘上,或通过网络传输,以备以后重新恢复成原来的对象。序列化机制使得对象可
以脱离程序的运行而独立存在。
对象的序列化(Serialize)指将一个Java对象写入IO流中,与此对应的是,对象的反
序列化(Deserialize)则指从IO流中恢复该Java对象如果需要让某个对象支持序列化
机制,则必须让它的类是可序列化的(serializable)。
为了让某个类是可序列化的,该类必须实现如下两个接口之一:
Serializable(常用)
12.12、对象序列化
ExternalizableJava
很多类已经实现了Serializable,该接口是一个标记接口,实现该接口无须实现任
何方法,它只是表明该类的实例是可序列化的。
所有可能在网络上传输的对象的类都应该是可序列化的,否则程序将会出现异
常。
示例代码
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class ObjectStream {
public static void main(String[] args) throws Exception {
//‐‐‐‐‐‐‐‐‐‐序列化过程‐‐‐‐‐‐‐‐‐
System.out.println("‐‐‐‐‐‐‐‐‐‐序列化过程‐‐‐‐‐‐‐‐‐");
//创建实例
Person person = new Person(“小明”, 20);
//实例化 FileOutputStream
FileOutputStream out = new FileOutputStream(
“E:\z\person.txt”);
//实例化 ObjectOutputStream
ObjectOutputStream outputStream = new ObjectOutputStream(out);
// 周用ObjectOutputStream对象的writeObject()方法输出可序列化对象
outputStream.writeObject(person);
//关闭 ObjectOutputStream
outputStream.close();
//‐‐‐‐‐‐‐‐‐‐反序列化过程‐‐‐‐‐‐‐‐‐‐
System.out.println("‐‐‐‐‐‐‐‐‐‐反序列化过程‐‐‐‐‐‐‐‐‐‐");
//实例化 FileInputStream
FileInputStream in = new FileInputStream(
“E:\z\person.txt”);
//实例化 ObjectInputStream
ObjectInputStream inputStream = new ObjectInputStream(in);
/**
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class ObjectStream {
public static void main(String[] args) throws Exception {
//‐‐‐‐‐‐‐‐‐‐序列化过程‐‐‐‐‐‐‐‐‐
System.out.println("‐‐‐‐‐‐‐‐‐‐序列化过程‐‐‐‐‐‐‐‐‐");
//创建实例
Person person = new Person(“小明”, 20);
//实例化 FileOutputStream
FileOutputStream out = new FileOutputStream(
“E:\z\person.txt”);
//实例化 ObjectOutputStream
ObjectOutputStream outputStream = new ObjectOutputStream(out);
// 周用ObjectOutputStream对象的writeObject()方法输出可序列化对象
outputStream.writeObject(person);
//关闭 ObjectOutputStream
outputStream.close();
//‐‐‐‐‐‐‐‐‐‐反序列化过程‐‐‐‐‐‐‐‐‐‐
System.out.println("‐‐‐‐‐‐‐‐‐‐反序列化过程‐‐‐‐‐‐‐‐‐‐");
//实例化 FileInputStream
FileInputStream in = new FileInputStream(
“E:\z\person.txt”);
//实例化 ObjectInputStream
ObjectInputStream inputStream = new ObjectInputStream(in);
/** * 必须指出的是,反序列化读取的仅仅是Java对象的数据,
* 而不是Java类, 因此采用反序列化恢复Java对象时,
* 必须提供该Java对象所属类的class文件,
* 否则将会引发ClassNotFoundException异常。
* 反序列化无须通过构造器来初始化Java对象。
/
//readObject() 可以反序列化对象
Person person2 = (com.gx.iodemo.Person) inputStream
.readObject();
//关闭 ObjectInputStream
inputStream.close();
System.out.println(“name=”+person2.getName());
System.out.println(“age=”+person2.getAge());
}
}
class Person implements Serializable {
/
*
*
*/
private static final long serialVersionUID = ‐3138823756540735938L;
private String name;
private int age;
public Person() {
System.out.println(“无参构造器”);
}
public Person(String name, int age) {
this.name = name;
this.age = age;
System.out.println(“有参构造器”);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值