Java序列化与反序列化的实例分析讲解

Java序列化与反序列化的实例分析讲解

Java序列化是Java中一种比较常用的处理对象持久化问题的方式,序列化是将一个对象转换成字节流表示的过程,反序列化是将字节流重新转化成对象的过程,使得对象在不同计算机、不同应用程序之间传输成为可能。

序列化的实现方法

在Java中,序列化的实现主要有两种方式:

  1. 实现Serializable接口。Serializable是Java中的接口,它标识了类的实例可以序列化。若要序列化对象,需要将该对象所属类实现Serializable接口,并声明一个serialVersionUID字段。

  2. 实现Externalizable接口。如果一个类实现了Externalizable接口,则它必须实现readExternal()和writeExternal()方法。使用Externalizable接口实现序列化可以更灵活地控制序列化的过程。

下面是一个实现Serializable接口的示例。

import java.io.*;

class Employee implements Serializable{
   public String name;
   public String address;
   public transient int SSN;
   public int number;

   public void mailCheck(){
      System.out.println("Mailing a check to " + name + " " + address);
   }
}

如果一个类的某个字段不应该序列化,可以使用关键字transient修饰该字段,如上面的SSN字段。

序列化的示例

import java.io.*;

public class SerializeDemo {

    public static void main(String [] args) {
        Employee e = new Employee();
        e.name = "John Doe";
        e.address = "101 Main St.";
        e.SSN = 11122333;
        e.number = 101;

        try {
            FileOutputStream fileOut =
            new FileOutputStream("employee.ser");
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(e);
            out.close();
            fileOut.close();
            System.out.printf("Serialized data is saved in employee.ser");
        } catch (IOException i) {
            i.printStackTrace();
        }
    }
}

以上代码创建了一个Employee对象,并通过对象输出流将该对象序列化存储到employee.ser文件中。

反序列化的示例

import java.io.*;

public class DeserializeDemo {

    public static void main(String [] args) {
        Employee e = null;
        try {
            FileInputStream fileIn = new FileInputStream("employee.ser");
            ObjectInputStream in = new ObjectInputStream(fileIn);
            e = (Employee) in.readObject();
            in.close();
            fileIn.close();
        } catch (IOException i) {
            i.printStackTrace();
            return;
        } catch (ClassNotFoundException c) {
            System.out.println("Employee class not found");
            c.printStackTrace();
            return;
        }
        System.out.println("Deserialized Employee...");
        System.out.println("Name: " + e.name);
        System.out.println("Address: " + e.address);
        System.out.println("SSN: " + e.SSN);
        System.out.println("Number: " + e.number);
    }
}

以上代码从employee.ser文件中读取Employee对象并进行反序列化。注意,如果读取到的字节流无法被反序列化为对象,会抛出ClassNotFound异常。

以上就是Java序列化与反序列化的实例分析,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java序列化与反序列化的实例分析讲解 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 详解iframe与frame的区别

    详解iframe与frame的区别 概述 在网页开发中,iframe和frame都是用于在一个网页中嵌入另一个网页的标签。它们的作用是实现网页的分割和嵌套,但在实现方式和功能上有一些区别。 iframe iframe是HTML中的一个标签,用于在当前网页中嵌入另一个网页。它的使用方式如下: <iframe src=\"https://www.…

    other 2023年7月28日
    00
  • 如何理解gitcommitid

    如何理解Git commit ID 在Git中,每个提交都有一个唯一的标识符,称为“commit ID”或“SHA-1哈希值”。这个标识符是由根据提交的计算出来的,可以用来唯一地标识一个提交。在本文中,我们将详细讲解如何理解Git ID。 commit ID的格式 Git commit ID是一个40个字符长的十六进制字符串,它由Git根据提交的内容计算出来…

    other 2023年5月9日
    00
  • 使用Maven将springboot工程打包成docker镜像

    下面给出使用Maven将Spring Boot工程打包成Docker镜像的完整攻略,过程中包含两个示例说明。 环境准备 安装Docker,官网下载并安装Docker。 在本地Maven配置文件(settings.xml)中添加Docker镜像仓库的认证信息,以便Maven在上传Docker镜像时进行认证。如果还没有该文件,请复制$MAVEN_HOME/con…

    other 2023年6月27日
    00
  • mongodb的可视化工具

    MongoDB的可视化工具 MongoDB是一个非常流行的NoSQL数据库,它的结构为非常灵活的文档式存储。但是,MongoDB命令行界面对于很多人来说,操作麻烦不直观。因此,开发了如下几个MongoDB的可视化工具,以提高管理和操作效率。 1. Robo 3T Robo 3T是一款MongoDB的可视化管理软件,可以运行在Windows,Mac OS,Li…

    其他 2023年3月28日
    00
  • Java规则引擎easy-rules详细介绍

    Java规则引擎easy-rules详细介绍 Easy Rules 是一款 Java 规则引擎,它可以让你轻松地设计和实现业务逻辑规则。它使用简单,易于理解,主要特性有: 易于使用。 你只需要定义规则和事实对象,然后把它们传递给 Easy Rules 引擎。Easy Rules 可以把规则和事实对象封装成 Rules 对象,然后应用规则。 灵活的规则模型。 …

    other 2023年6月27日
    00
  • java实现递归文件列表的方法

    下面是Java实现递归文件列表的方法的完整攻略: 一、方法介绍 递归遍历文件列表是在程序开发中比较常用的操作之一,可以批量处理文件、统计文件数量等。Java实现递归文件列表的方法主要是通过递归算法来实现,它可以实现深度遍历或广度遍历遍历文件列表。在递归算法中,我们需要考虑文件夹与文件的分类遍历。 二、递归遍历文件列表的具体实现过程 递归遍历文件列表的方法需要…

    other 2023年6月27日
    00
  • ios16死机怎么强制重启 ios16强制重启教程

    iOS 16死机怎么强制重启?iOS 16强制重启教程 什么是iOS 16强制重启? iOS 16强制重启是将iPhone设备强制重置到初始状态,这通常发生在设备因某些原因而无法响应或冻结时,也称为硬重置、强制重启或强制重启。iOS 16强制重启可以解决一些常见的问题,例如应用程序崩溃、响应速度过慢、Wi-Fi问题等等。 iOS 16如何强制重启? 在iOS…

    other 2023年6月26日
    00
  • Python中全局变量和局部变量的理解与区别

    Python中全局变量和局部变量的理解与区别 在Python中,全局变量和局部变量是两种不同的变量类型,它们在作用域和访问权限上有所不同。理解和区分这两种变量类型对于编写清晰、可维护的代码非常重要。 全局变量 全局变量是在整个程序中都可以访问的变量,它可以在任何函数内部进行访问和修改。在Python中,全局变量通常在函数外部定义,并且在函数内部使用globa…

    other 2023年7月28日
    00
合作推广
合作推广
分享本页
返回顶部