Java对象序列化

前言: Java 对象序列化在初学的时候很不容易理解。

主要是理解 Java 对象序列化的基本概念。


概念: 将在内存中保存的对象变为二进制数据流的形式进行传输,或者是将其保存在文本中,并不意味着所有类都可以被序列化。需要被序列化的类对象往往需要传输使用。同时这个类必须实现java.io.Serializable接口。但是这个类并没有任何的方法定义,只是一个标识接口

使用序列化的情况:

· 需要通过网络来发送对象,或对象的状态需要被持久化到数据库或文件中。
· 序列化能实现深复制,即可以复制引用的对象。

定义可以被序列化的类:

@SuppressWarnings("serial")
class Person implements Serializable{
    private String name;
    private int age;
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
}

序列化对象时要保存的就是对象中的属性。所以默认情况下对象的属性将被转为二进制数据流。
如果想要实现序列化和反序列化对象操作,在java.io提供有两个类:ObjectOutputStream序列化ObjectInputStream反序列化

这里写图片描述
这里写图片描述

下面例子简单实现对象序列化和反序列化:

第一步创建 Person 类:

@SuppressWarnings("serial")
class Person implements Serializable{
    private String name;
    private int age;
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
}

第二步创建测试类 TestDemo 类:

public class TestDemo {
    public static final File file = new File("C:" + File.separator + "Users" + File.separator +"lenovo" + File.separator +"Desktop" + File.separator + "person.ser");
    public static void main(String[] args) throws Exception {       
        ser(new Person("张三", 20));
        dser();
    }
    public static void ser(Object obj) throws Exception {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
        oos.writeObject(obj);
        oos.close();
    }

    public static void dser() throws Exception {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
        Object read = ois.readObject();
        System.out.println(read);
        ois.close();
    }
    }

个人博客链接:xvanning.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值