实现Serializable序列化接口实现文件的读写

什么是Serializable序列化接口

序列化接口是一个空实现
是java.io包定义的用于实现序列化的语义级别的接口,这个接口是用来通知jvm让其帮助做类的序列化
实现了Serializable接口可以序列化,通过ObjectOuputStream转换为字节流,保存到文件中;然后可以反序列化,通过ObjectInputStream转换为java对象

序列化的作用

无论什么变成语言,底层都是操作系统通过字节流的方式实现的,写操作可以把编程语言的数据类型转换为字节流,读操作可以把字节流转换为编程语言的数据类型
可以把对象的状态信息通过网络进行传输,或者把对象的信息持久化

为什么要定义SerializableUID变量

在这里插入图片描述
表达的意思是:没有显示声明serializableUID,系统会默认生成一个,但建议显示声明serializableUID,因为系统默认生成的对class及其敏感,在反序列化过程中容易抛出异常,建议用private修饰,其不适用于子类

序列化和反序列化的实现

User

package com.cjy.bean;

import java.io.Serializable;
import java.sql.Date;

public class User implements Serializable {
    
    private static final long serialVersionUID = 1L;

    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public User() {

    }

    public User(Integer id, String username, Date birthday, String sex, String address) {
        this.id = id;
        this.username = username;
        this.birthday = birthday;
        this.sex = sex;
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

SerializableTestWriteFile

import com.cjy.bean.User;


import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;


public class SerializableTestWriteFile {


        /**
         * 将User对象作为文本写入磁盘
         */
        public static void writeObj() throws ParseException {
            User user = new User(2,"cjy",new Date(new SimpleDateFormat("yyyy-MM-dd").parse("1234-12-12").getTime()),"男","随州市");
            try {
                ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("E:/user.txt"));
                objectOutputStream.writeObject(user);
                objectOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        public static void main(String args[]) throws ParseException {
            writeObj();
        }


}

SerializableTestReadFile

import com.cjy.bean.User;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class SerializableTestReadFile {

        /**
         * 将类从文本中提取并赋值给内存中的类
         */
        public static void readObj() {
            try {
                ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("E:/user.txt"));
                try {
                    Object object = objectInputStream.readObject();
                    User user = (User) object;
                    System.out.println(user);
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


        public static void main(String args[]) {
            readObj();
        }


}

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值