序列化和反序列化的实例学习

该篇文章展示了如何使用Java中的IODemo包实现对象的序列化和反序列化,通过`SerializableObjectUtils`类将`Student`对象保存到磁盘并进行数据修改和恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IODemo

package com.jsu.Demo;

import java.io.*;

public class IODemo {
    public static void main(String[] args) {
        Student student = new Student("ZHANGS",1001);
        try {
            SerializableObjectUtils.SerializeObject("D://兵马俑", student);
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            Object o = SerializableObjectUtils.reSerializableObject("D://兵马俑");
            student = (Student) o;

            System.out.println(student.getName());
            student.setAge(2000);
            System.out.println(student.getAge());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

SerializableObjectUtils

package com.jsu.Demo;
import java.io.*;

public class SerializableObjectUtils {
    public static void SerializeObject(String destPath, Object obj) throws IOException{
        FileOutputStream fos = null;
        ObjectOutputStream oos = null;
        fos = new FileOutputStream(destPath);
        oos = new ObjectOutputStream(fos);
        oos.writeObject(obj);
        oos.close();
        fos.close();
    }
    public static Object reSerializableObject(String srcPath) throws IOException, ClassNotFoundException{
        FileInputStream fis = null;
        ObjectInputStream ois = null;

        fis = new FileInputStream(srcPath);
        ois = new ObjectInputStream(fis);
        Object o = ois.readObject();
        ois.close();
        fis.close();
        return o;
    }
//    public static void copy(String Src,String Address){
//        File src = new File(Src);
//        File address = new File(Address);
//
//    }
}

Student

package com.jsu.Demo;

import java.io.Serializable;
import java.util.Objects;

public class Student implements Serializable{

    private static final long serialVersionUID = 1L;
//    private int id;
    private String name;
    private int age;

    public Student() {
    }

//    public Student(int id, String name) {
//        this.id = id;
//        this.name = name;
//    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

//    public int getId() {
//        return id;
//    }

//    @Override
//    public boolean equals(Object o) {
//        if(this == o) {
//            return true;
//        }
//        if(o == null || getClass() != o.getClass()) {
//            return false;
//        }
//        Student student =  (Student) o;
//        return id == student.id && Objects.equals(name, student.name);
//    }
//
//    @Override
//    public int hashCode() {
//        retuen Objects.hash(id.name);
//    }

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

    public String getName() {
    return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

8a98ccade25342bc9d81f0a765bb93da.jpg

运行后会发现D盘中多了一个“兵马俑”的文件,实际上这篇文件经历了序列化和反序列化的过程,其中的数据经历过一次改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值