Java反序列化测试
发布日期:2025-04-02 02:58:23 浏览次数:9 分类:精选文章

本文共 3425 字,大约阅读时间需要 11 分钟。

如何将对象进行“加密”写入磁盘?序列化技术详解

前言

有没有想过如何将对象进行“加密”后写入磁盘?这时候,序列化技术就派上用场!它能将对象的状态信息转换为可以存储或传输的形式,提供了一种优秀的解决方案。

序列化的概念

序列化(Serialization)是一项将对象的状态信息转换为可以存储或传输的格式的过程。在序列化过程中,对象会将自身的当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。这种机制在管理远程对象或实现数据持久化时尤为重要。

反序列化的Java实验

为了更直观地理解序列化,我们可以通过简单的Java实验来体验其工作原理。

实体类

下面是一个实现序列化接口的Java实体类:

package exercise;
import java.io.Serializable;
public class Person implements Serializable {
private String name;
private int age;
public Person() {}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
}

单对象序列化

以下是一个实现单对象序列化的Java程序:

package exercise;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class ObjectStreamDemo1 {
public static String PATH = "obj.object1";
public static void main(String[] args) throws IOException {
writeObj();
readObj();
System.out.println("--End--");
}
public static void readObj() throws IOException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(PATH));
Person p = (Person) ois.readObject();
System.out.println(p.getName() + "|" + p.getAge());
}
public static void writeObj() throws IOException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(PATH));
oos.writeObject(new Person("张三", 30));
oos.close();
}
}

运行该程序后,会在文件系统中生成一个名为obj.object1的二进制文件。由于二进制文件为机器可读,使用Notepad打开会看到一堆杂乱的字符,这正是序列化的正常现象。

多对象序列化

以下是一个实现多对象序列化的Java程序:

package exercise;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
public class ObjectStreamDemo2 {
public static String PATH = "obj.object";
public static void main(String[] args) throws IOException {
List
persons = new ArrayList<>();
Person p1 = new Person("张三", 18);
Person p2 = new Person("李四", 19);
persons.add(p1);
persons.add(p2);
writeObj(persons);
readObj();
System.out.println("---end!---");
}
private static void writeObj(List
persons) throws IOException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(PATH));
oos.writeObject(persons);
oos.close();
}
private static void readObj() throws IOException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(PATH));
List
persons = (List
) ois.readObject();
for (Person p : persons) {
System.out.println(p.getName() + "|" + p.getAge());
}
}
}

运行上述程序会生成obj.object文件。就像之前的例子一样,使用Notepad打开该文件会看到二进制内容,但这是种预期现象。

注意事项

在实际应用中,请注意以下几点:

  • 实体类必须实现序列化接口java.io.Serializable,否则会抛出NotSerializableException异常。
  • 生成的二进制文件由于是机器可读,不能直接通过文本编辑软件(如Notepad)打开。如果需要查看文件内容,可以使用十六进制查看工具。
  • 总结

    通过本文的学习,我们了解了序列化技术的基本原理及其在Java中的应用方法。无论是在将一个单个对象写入文件,还是实现一个复杂的多对象序列化,这项技术都能轻松应对。希望通过这些实例和解释,您能对序列化有更清晰的理解,并在实际开发中灵活运用这一技术。

    上一篇:JAVA反序列化漏洞修复解决方法
    下一篇:Java反序列化和JNDI注入漏洞案例实战

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2025年04月30日 11时26分25秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章

    Elasticsearch设置账号密码 2025-03-29
    elasticsearch配置文件里的一些坑 [Failed to load settings from [elasticsearch.yml]] 2025-03-29
    Elasticsearch面试题 2025-03-29
    element ui 时间日期选择器 el-date-picker 报错 Prop being mutated “placement“ 2025-03-29
    Hibernate二级缓存配置 2025-03-29
    element 如何使用自定义icon图标 2025-03-29
    element-plus修改主题颜色 2025-03-29
    element-plus的el-date-picker日期范围选择控件,根据开始日期限定结束日期的可选范围为开始日期到开始日期+30天 2025-03-29
    18 个一线工作中常用 Shell 脚本【实用版】 2025-03-29
    element-ui:el-input输入数字-整数和小数 2025-03-29
    ElementUI-el-progress改变进度条颜色跟文字样式 2025-03-29
    ELK原理与介绍(转) 2025-03-29
    ELK学习笔记(三)单台服务器多节点部署 2025-03-29
    ELK应用日志收集实战 2025-03-29
    elTable火狐浏览器换行 2025-03-29
    15个Python数据处理技巧(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
    2023年深信服、奇安信、360等大厂网络安全校招面试真题合集(附答案),让你面试轻松无压力! 2025-03-29
    2024年全国程序员平均薪资排名:同样是程序员,为什么差这么多?零基础到精通,收藏这篇就够了 2025-03-29
    0基础成功转行网络安全工程师,年薪30W+,经验总结都在这(建议收藏) 2025-03-29
    100个电脑常用组合键大全(非常详细)零基础入门到精通,收藏这篇就够了 2025-03-29