序列化与反序列化机制

序列化机制是为了将对象进行传输,将对象通过序列化机制转换成二进制流,再通过反序列化恢复成对象

对于系统类,String 和基本数据类型都是默认支持序列化机制的,对于自定义类想要实现序列化机制,

1:继承Serializable接口

2:创建全局常量 serialVersionUID     public static final long serialVersionUID=14656556L;

3:类里面的所有属性必须是可序列化的,如果有另一个自定义类属性,必须也要去支持此机制

 1 /**
 2  * 对象流的使用:
 3  * ObjectInputStream,ObjectOutputSteam
 4  * 作用:用于存储和读取基本数据类型数据或对象的处理流,可以把Java中的对象进行传输
 5  * 允许将内存中的Java对象转换成与平台无关的二进制流,从而允许吧这种二进制流持久的保存在磁盘上,或者通过网络
 6  * 将这种二进制流传输到另一个网络节点,但其它程序获取了这种二进制流,就可以恢复成原来的java对象
 7  * **************
 8  * 序列化的好处在于可以将任何实现了Serializable接口的对象转换成字节数据,使其在传输或者保存时可以被还原
 9  * **************
10  * 序列化是RMI(远程方法调用,Remove Method Invoke)过程的参数和返回值都必须实现的机制,PMI是JavaEE的基础
11  * 因此序列化机制是JavaEE平台的基础
12  * *************
13  * 如果需要让某个对象支持序列化机制,必须让对象所属的类及其属性是可序列化的,为了让某个类是可序列化的,
14  * 该类必须实现如下两个接口:Serializable,Externalizable
15  * ************
16  * 对于Static修饰的变量是不能序列化与反序列化的
17  *
18  * 
19  *
20  *
21  *
22  */
23 public class ObjectInputStreamTest implements Serializable{
24     /**
25      * 序列化过程:将内存中的Java对象保存到磁盘中或者通过网络传输出去
26      * 使用ObjectInputStream实现
27      */
28     @Test
29     public void test(){
30         ObjectOutputStream ob= null;
31         try {
32             ob = new ObjectOutputStream(new FileOutputStream("object.dat"));
33             ob.writeObject(new String("我爱中国"));
34             ob.flush();
35             ob.writeObject(new hpppp("hpp",20));
36             ob.flush();
37         } catch (IOException e) {
38             e.printStackTrace();
39         } finally {
40             try {
41                 ob.close();
42             } catch (IOException e) {
43                 e.printStackTrace();
44             }
45         }
46     }
47     //反序列化过程:objectInputStream
48     @Test
49     public void test2() throws IOException{
50  ObjectInputStream obj= new ObjectInputStream(new FileInputStream("object.dat"));
51         Object object= null;
52         try {
53             object = obj.readObject();
54             hpppp h=(hpppp) obj.readObject();
55             System.out.println(h);
56         } catch (ClassNotFoundException e) {
57             e.printStackTrace();
58         }
59         String str=(String) object;
60         System.out.println(str);
61 
62                 obj.close();
63         }
64     }
65     class hpppp implements Serializable{
66         //自定义类可以实现序列化机制的前提
67         // 继承Serializable接口,
68         // 提供一个全局常量serialVersionUID
69         // 类里面的属性也是要可序列化的,String可以,基本数据类型默认也是可以的
70     public static final long serialVersionUID=-4998231495L;
71     String name;
72     int age;
73         public hpppp(String name, int age) {
74             this.name = name;
75             this.age = age;
76         }
77 
78         @Override
79         public String toString() {
80             return name+":"+age;
81         }
82     }

 

posted @ 2021-12-07 16:41  tiiiiii  阅读(102)  评论(0)    收藏  举报