闫平平
写代码也要酷酷的!

导航

 

Java对象的序列化和反序列化

一:序列化和反序列化的概念。

两个用于从流中读取对象

序列化:将对象转换字节序列的过程称为对象的序列化。

反序列化:将字节序列恢复为原对象的过程称为对象的反序列化。(把对象的字节序列永久的保存到硬盘上,通常放一个文件)。

二:JDK库中的序列化API

反序列化流:ObjectInputStrean,它的readObject()方法从持久化存储中把对象读取出来。

序列化流:ObjectOutputStream,它的writeObject()方法将字节序列永久的写入硬盘上。

对象序列化过程:

1、创建一个对象输出流ObjectOutputStream。

2、通过输出流的writeObject()方法写对象。

 

反序列化过程:

1、创建一个对象输入流ObjectInputStream。

2、通过输入流的readObject()方法读对象

 

例子:

定义一个person类,实现 Serializable接口

 1 package com.aaa.demo4;
 2 
 3 import java.io.Serializable;
 4 
 5 public class Demo1Person implements Serializable{
 6     public String name;
 7     public int age;
 8     public Demo1Person() {
 9     }
10     public Demo1Person(String name, int age) {
11         super();
12         this.name = name;
13         this.age = age;
14     }
15     public String getName() {
16         return name;
17     }
18     public void setName(String name) {
19         this.name = name;
20     }
21     public int getAge() {
22         return age;
23     }
24     public void setAge(int age) {
25         this.age = age;
26     }
27     @Override
28     public String toString() {
29         return "Demo1Person [name=" + name + ", age=" + age + "]";
30     }
31     
32 }

序列化和反序列化Person对象:

 1 package com.aaa.demo4;
 2 
 3 import java.io.FileInputStream;
 4 import java.io.FileNotFoundException;
 5 import java.io.FileOutputStream;
 6 import java.io.ObjectInputStream;
 7 import java.io.ObjectOutputStream;
 8 
 9 public class Demo1ObjectStream {
10     public static void main(String[] args) throws Exception {
11         writeObject();//序列化对象
12         readObject();//反序列化对象
13     }
14     public static void readObject() throws Exception{
15         FileInputStream fis=new FileInputStream("c:\\person.txt");
16         //创建反序列化流 readObject() 读对象
17         ObjectInputStream ois=new ObjectInputStream(fis);
18         Object obj=ois.readObject();
19         System.out.println(obj);
20         ois.close();
21     }
22     public static void writeObject() throws Exception{
23         FileOutputStream fos=new FileOutputStream("c:\\person.txt");
24         //创建写出对象的序列化的对象 构造方法传递字节输出流
25         ObjectOutputStream oos=new ObjectOutputStream(fos);
26         Demo1Person p=new Demo1Person("大冰",23);
27         oos.writeObject(p);
28         oos.close();
29     }
30 }

 

posted on 2019-03-27 22:29  写代码也要酷酷的  阅读(156)  评论(0编辑  收藏  举报