编写Java反序列化的函数实现序列化和反序列化

本文详细介绍了Java中的序列化与反序列化过程,使用了ObjectOutputStream的writeObject方法进行序列化,以及ObjectInputStream的readObject方法进行反序列化,以Person类为例,并展示了实际操作中文件的生成和内容解析。

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

序列化:
ObjectOutputStream --> writeObject()
反序列化: 
ObjectInputStream --> readObject()  

java序列化,反序列化代码

Person.class
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
​
public class Person implements Serializable {
    //implements:实现了一个Serializable接口
    //Person接口如果想要序列号或反序列化就要继承可以序列化反序列化的类,如Serializable
    public int age;
    public String name;
​
    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {//private私有的,无法被继承
        //ObjectInputStream:一个类型名,是所有类型的父类
        Runtime.getRuntime().exec("calc");
        // 默认的反序列化操作
        in.defaultReadObject();
    }
}
dyl.class
import java.io.*;
​
public class Test {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Person p=new Person();
        p.age=18;
        p.name="dyl";
​
        serialize(p,"dyl.bin");
​
​
        System.out.println("反序列化结果:" + deserialize("dyl.bin"));
    }
​
    public static void serialize(Object obj, String filePath) throws IOException {
        try (FileOutputStream fileOut = new FileOutputStream(filePath);
             ObjectOutputStream objectOut = new ObjectOutputStream(fileOut)) {
            objectOut.writeObject(obj);
        }
    }
​
    public static Object deserialize(String filePath) throws IOException, ClassNotFoundException {
        try (FileInputStream fileIn = new FileInputStream(filePath);
             ObjectInputStream objectIn = new ObjectInputStream(fileIn)) {
            return objectIn.readObject();
        }
    }
}

java序列化效果

执行Dyl.class,调出计算机,并生成一个dyl.bin文件

dyl.bin文件内容(java序列号的结果):

�� •sr •Person"qC���•�• •I •ageL •namet •Ljava/lang/String;xp   •t •dyl

java反序列化效果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值