
Java反序列化测试
实体类必须实现序列化接口 生成的二进制文件由于是机器可读,不能直接通过文本编辑软件(如Notepad)打开。如果需要查看文件内容,可以使用十六进制查看工具。
发布日期: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 { Listpersons = 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
异常。总结
通过本文的学习,我们了解了序列化技术的基本原理及其在Java中的应用方法。无论是在将一个单个对象写入文件,还是实现一个复杂的多对象序列化,这项技术都能轻松应对。希望通过这些实例和解释,您能对序列化有更清晰的理解,并在实际开发中灵活运用这一技术。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月30日 11时26分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Elasticsearch设置账号密码
2025-03-29
Elasticsearch面试题
2025-03-29
Hibernate二级缓存配置
2025-03-29
element 如何使用自定义icon图标
2025-03-29
element-plus修改主题颜色
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
0基础成功转行网络安全工程师,年薪30W+,经验总结都在这(建议收藏)
2025-03-29
100个电脑常用组合键大全(非常详细)零基础入门到精通,收藏这篇就够了
2025-03-29