1 package com.io;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileOutputStream;
6 import java.io.IOException;
7 import java.io.ObjectInputStream;
8 import java.io.ObjectOutputStream;
9 import java.io.Serializable;
10
11 import org.junit.Test;
12
13 /**
14 *
15 * 1、对象的序列化机制:把内存中的java对象转换成与平台无关的二进制流,
16 * 持久地保存地磁盘上或通过网络传输到另一个节点
17 * 2、反序列化: 当其它程序获取了这种二进制流以后,可以恢复成原来的对象
18 *
19 *
20 */
21 public class 对象流 {
22 @Test
23 public void objOutputStreamTest(){
24 Person p1 = new Person("小明",22);
25 Person p2 = new Person("小红",23);
26
27 ObjectOutputStream oos = null;
28 try {
29 oos = new ObjectOutputStream(new FileOutputStream(new File("obj.txt")));
30 oos.writeObject(p1);
31 oos.writeObject(p2);
32 oos.flush();
33 } catch (IOException e) {
34 // TODO Auto-generated catch block
35 e.printStackTrace();
36 }finally{
37 try {
38 oos.close();
39 } catch (IOException e) {
40 e.printStackTrace();
41 }
42 }
43 }
44
45 @Test
46 public void readObject(){
47 ObjectInputStream ois = null;
48 try {
49 ois = new ObjectInputStream(new FileInputStream(new File("obj.txt")));
50
51 Person p1 = (Person) ois.readObject();
52 Object p2 = (Object)ois.readObject();
53 System.out.println(p1);
54 System.out.println(p2);
55 } catch ( IOException e) {
56 // TODO Auto-generated catch block
57 e.printStackTrace();
58 } catch (ClassNotFoundException e) {
59 // TODO Auto-generated catch block
60 e.printStackTrace();
61 }finally{
62 try {
63 ois.close();
64 } catch (IOException e) {
65 // TODO Auto-generated catch block
66 e.printStackTrace();
67 }
68 }
69 }
70 }
71
72 /**
73 *
74 * @author Administrator
75 *要实现序列化的类要求:
76 *(1)类是可序列化的:实现Serializable接口
77 *(2)类的属性是可序列化的,属性也继承Serializable接口
78 *(3)使用static 和 transient关键字修饰的属性不可被序列化
79 *(4)提供一个版本号serialVersionUID
80 */
81
82
83 /*
84 * 凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量:
85 private static final long serialVersionUID;
86 serialVersionUID用来表明类的不同版本间的兼容性
87 如果类没有显示定义这个静态变量,它的值是Java运行时环境根据类的内部细节自动生成的。若类的源代码作了修改,serialVersionUID 可能发生变化。故建议,显示声明
88 显示定义serialVersionUID的用途
89 希望类的不同版本对序列化兼容,因此需确保类的不同版本具有相同的serialVersionUID
90 不希望类的不同版本对序列化兼容,因此需确保类的不同版本具有不同的serialVersionUID
91
92 */
93 class Person implements Serializable{
94 /**
95 *
96 */
97 private static final long serialVersionUID = -8305586168290840729L;
98
99 private String name ;
100
101 private int age;
102
103 public Person(String name,Integer age){
104 this.name = name;
105 this.age = age;
106 }
107
108 /* (non-Javadoc)
109 * @see java.lang.Object#toString()
110 */
111 @Override
112 public String toString() {
113 return "Person [name=" + name + ", age=" + age + "]";
114 }
115
116
117 }