博客
关于我
Java反序列化测试
阅读量:803 次
发布时间:2023-01-28

本文共 3347 字,大约阅读时间需要 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中的应用方法。无论是在将一个单个对象写入文件,还是实现一个复杂的多对象序列化,这项技术都能轻松应对。希望通过这些实例和解释,您能对序列化有更清晰的理解,并在实际开发中灵活运用这一技术。

    转载地址:http://hiryk.baihongyu.com/

    你可能感兴趣的文章
    Nginx + Spring Boot 实现负载均衡
    查看>>
    Nginx + Tomcat + SpringBoot 部署项目
    查看>>
    Nginx + uWSGI + Flask + Vhost
    查看>>
    Nginx - Header详解
    查看>>
    Nginx - 反向代理、负载均衡、动静分离、底层原理(案例实战分析)
    查看>>
    Nginx - 反向代理与负载均衡
    查看>>
    nginx 1.24.0 安装nginx最新稳定版
    查看>>
    nginx 301 永久重定向
    查看>>
    nginx connect 模块安装以及配置
    查看>>
    nginx css,js合并插件,淘宝nginx合并js,css插件
    查看>>
    Nginx gateway集群和动态网关
    查看>>
    Nginx keepalived一主一从高可用,手把手带你一步一步配置!
    查看>>
    Nginx Location配置总结
    查看>>
    Nginx log文件写入失败?log文件权限设置问题
    查看>>
    Nginx Lua install
    查看>>
    nginx net::ERR_ABORTED 403 (Forbidden)
    查看>>
    Nginx SSL 性能调优
    查看>>
    Nginx SSL私有证书自签,且反代80端口
    查看>>
    Nginx upstream性能优化
    查看>>
    Nginx 中解决跨域问题
    查看>>