学习笔记---Java中的序列化 Serializable

Java 序列化(Serializable)

Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型和信息和存储在对象中数据的类型。
将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据还有对象中的数据类型可以用来在内存中新建对象。
整个过程都是 JVM 独立的,在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象。
类 ObjectOutputStream 和 ObjectOutputStream 是高层次的数据流,它们包含反序列化和序列化对象的方法。

序列化满足条件:

  • 该类实现 java.io.Serializable 接口
  • 该类的所有属性必须是可序列化的,如果一个属性不是可序列化的,则该属性必须注明是短暂的
  • 如果想知道一个 java 标准类是否可以序列化,只需查看该类有没有实现 java.io.Serializable 接口

代码实现

首先创建一个Student.java类并且集成 java.io.Serializable 接口

public class Student implements Serializable {
    private String name;
    private int age;
    private String sex;
    //省略有无参构造,get/set方法,toString方法
}

1. 序列化对象

ObjectOutputStream 类用来序列化一个对象,下面代码将 Student 对象序列化,并将该对象序列化到 d 盘 student.txt 文件中。

public class Test {
    public static void main(String[] args) throws IOException {
        Student student1 = new Student("张三", 20, "男");
        Student student2 = new Student("李四", 20, "男");
        Student student3 = new Student("王五", 20, "男");
        FileOutputStream outFile = new FileOutputStream("d:/student.txt");
        ObjectOutputStream out = new ObjectOutputStream(outFile);
        out.writeObject(student1);
        out.writeObject(student2);
        out.writeObject(student3);
        out.close();
        outFile.close();
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tvXiYfQ9-1612252765476)(D:\notes\java\java序列化.assets\image-20210202155513234.png)]

2. 反序列对象,将上面序列化完成的对象反序列化

public class Test2 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        FileInputStream inFile = new FileInputStream("d:/student.txt");
        ObjectInputStream in = new ObjectInputStream(inFile);
        while (true){
            try {
                System.out.println(in.readObject());
            }catch (Exception e){
                break;
            }
        }
        in.close();
        inFile.close();
    }
}

运行结果:
    Student{name='张三', age=20, sex='男'}
	Student{name='李四', age=20, sex='男'}
	Student{name='王五', age=20, sex='男'}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值