对象流序列号与反序列号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*
       序列化过程:将内存中的java对象保存到磁盘中或通过网络传输出去,使用ObjectOutputStream
     */
    @Test
    public void test5() throws IOException {
        FileOutputStream fos = new FileOutputStream("hello.dat");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeUTF("java学习中");
        oos.flush();//刷新操作
 
        oos.writeObject(new Person("张三",20));
        oos.flush();
        oos.close();
    }
 
    /*
        反序列化:将磁盘文件中的对象还原为内存中的一个java对象
        使用ObjectInputStream
     */
    @Test
    public void test6() throws IOException, ClassNotFoundException {
        FileInputStream fis = new FileInputStream("hello.dat");
        ObjectInputStream ois = new ObjectInputStream(fis);
 
        Object o = ois.readUTF();
        Object o1 = ois.readObject();
 
        String str = (String)o;
        System.out.println(str);
        System.out.println(o1);
        ois.close();
    }

  

Person类序列化需要满足以下条件:

1.需要实现接口Serializable 

2.当前类提供一个常量:serialVersionUID 

3.除了当前Person类需要实现Serializable 接口之外,还必须保证其内部的所有属性也必须是可序列号的(默认情况下,基本数据类型可序列号)

1
ObjectOutputStream 、ObjectInputStream 不能序列化statictransient修饰的成员变量

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Person implements Serializable {
    private static final long serialVersionUID = -68494470754667710L;
    private String name;
    private int age;
 
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
 
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

  

 

posted @   iTao0128  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示