序列化和反序列化

序列化和反序列化



序列化:指将一个对象给定一个唯一的编号,让其他人也可以通过序列号使用它。

反序列化:将序列化的对象再重新转换为对象。


创建一个User类

/**
 * 创建一个User类并实现Serializable接口
 * 使该类序列化
 */
public class User implements Serializable {
    private Integer userId;
    private String account;
    private String key;
    private char sex;
    private Integer age;
    //生成无参构造方法
    public User() {
    }
	//生成有参构造方法
    public User(Integer userId, String account, String key, char sex, Integer age) {
        this.userId = userId;
        this.account = account;
        this.key = key;
        this.sex = sex;
        this.age = age;
    }
    //重写toString方法
    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", account='" + account + '\'' +
                ", key='" + key + '\'' +
                ", sex=" + sex +
                ", age=" + age +
                '}';
    }
}

之后创建一个User对象,并把它写到文件当中。

private static String temp = "f:"+File.separator+"io"+File.separator+"temp.txt";
static void writerUser(){
        User user = new User(1,"admin1","123",'男',100);
        try {
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(temp));
            //把对象序列化到文件中
            oos.writeObject(user);
            oos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

打开写入的文件
在这里插入图片描述

可以还是可以看出一些user对象的痕迹的

之后再用方法读取

static void exp2(){
        try {
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(temp));
            User user = (User) ois.readObject();
            System.out.println(user);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

控制台中可以看出
在这里插入图片描述
已完整输出了刚刚写入的对象。


再假设不用序列化,不要让User类实现Serializable接口,再调用上面两个方法

则会得到:

在这里插入图片描述

NotSerializableException 【未序列化异常】
因为没有序列化,所以无法根据读取到文件生成新的对象。


总结:

创建一个实例不仅仅可以使用new 这个对象,还可以使用反序列化来创建。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值