Java序列化和反序列化

Java序列化和反序列化的概念如下:

序列化:将Java对象转化为可以存储或传输的形式。

反序列化:将在序列化过程中创建的表示形式还原为Java对象。

序列化的用途主要有以下几种:

  • 持久性:通过序列化可以在对象之间传递或在网络上传输。
  • 分布式计算:RMI(Remote Method Invocation)使用序列化来实现远程调用。
  • 安全性:由于序列化后的数据不包含任何执行代码,因此序列化也可以作为一种安全机制来防止恶意代码执行。

序列化的步骤包括:

  1. 创建一个实现了java.io.Serializable接口的对象。
  2. 使用ObjectOutputStream的writeObject()方法将对象写入流中。

反序列化的步骤包括:

  1. 使用ObjectInputStream的readObject()方法从流中读取对象。
  2. 调用适当的构造函数来创建对象并将其状态恢复为原来的值。

需要注意的是,不是所有的对象都可以被序列化,只有实现了Serializable接口或者Externalizable接口的对象才能被序列化。此外,如果一个对象的字段不想被序列化,则可以通过添加transient关键字来忽略。另外,在反序列化时还需要注意版本兼容性问题。如果有更新的类,应该保持 serialVersionUID 的值不变,以便于旧的序列化数据能够正确地反序列化到新的类上。

import java.io.*;

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

        serialize(p,"wb.bin");


        System.out.println("反序列化结果:" + deserialize("wb.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
发出的红包

打赏作者

池央_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值