编写Java反序列化的函数

本文详细解释了Java中的序列化和反序列化概念,涉及实现Serialized接口、Transient关键字的使用,以及ObjectInputStream和反序列化过程。通过示例展示了如何在Person类中实现序列化和反序列化功能。
摘要由CSDN通过智能技术生成

序列化和反序列化释义

序列化:Java的序列化是指将对象的状态转换为字节序列的过程,以便可以将这些字节序列存储到文件、数据库或通过网络传输。在序列化中,对象的属性和数据被转换为字节流的形式,这使得对象可以在不同的Java虚拟机之间或在不同的时间点进行传输和存储。

关键点:Java序列化的关键点包括: 1. **实现`Serialized`接口:**要使一个类可序列化,该类必须实现 `java.io.Serialized` 接口。这是一个标记接口,不包含任何方法,用来表明这个类的对象可以被序列化。如果一个类的某个成员变量是不可序列化的(比如线程或文件句柄),你需要使用 `transient` 关键字标记这个变量,以便在序列化时跳过。

反序列化:在Java中,反序列化是一个对象的字节表示还原成对象的过程。这个过程允许在将对象保存到文件、数据库或通过网络传输后,重新构建这个对象。

关键点:反序列化是序列化的逆向Java中的反序列化通常涉及到两个主要类:`ObjectInputStream` 和 `Serialized` 接口。 1. **ObjectInputStream:**这个类是用于从输入流中读取对象的。你可以使用`ObjectInputStream` 读取一个包含字节表示的输入流的对象,并将其转换为相应的对象。

序列化和反序列化

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;

public class Person implements Serializable {
    public int age;
    public String name;

    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
        Runtime.getRuntime().exec("calc");
        // 默认的反序列化操作
        in.defaultReadObject();
    }
}
import java.io.*;

public class Test {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Person p=new Person();
        p.age=18;
        p.name="xiu";

        serialize(p,"cxh.bin");


        System.out.println("反序列化结果:" + deserialize("xiu.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();
        }
    }
}

序列化 

反序列化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值