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日

相关文章

  • vue-cli配置环境变量的方法

    Vue CLI 是 Vue.js 官方提供的一个快速搭建 Vue.js 项目的工具,简化了项目配置的流程。在 Vue CLI 中,配置环境变量的方法如下: 1. 在 .env 文件中配置环境变量 在项目根目录下,新建一个.env文件,并添加环境变量。以VUE_APP_BASE_API为例,其格式为: VUE_APP_BASE_API=http://www.e…

    other 2023年6月27日
    00
  • 快速构建Windows 8风格应用1-开发工具安装及模拟器使用

    快速构建Windows 8风格应用1-开发工具安装及模拟器使用 如果你想要快速地构建出Windows 8风格的应用程序,你需要一些工具和模拟器的支持。在本篇文章中,我将会教你如何安装这些必要的工具,并介绍如何使用模拟器来测试你的应用程序。 安装开发工具 首先,你需要安装Visual Studio和相关的开发工具。Visual Studio是一款非常流行的集成…

    其他 2023年3月28日
    00
  • IDEA打包的两种方式及注意事项说明

    以下是使用标准的Markdown格式文本,详细讲解IDEA打包的两种方式及注意事项说明的完整攻略: IDEA打包的两种方式及注意事项说明 1. 使用IDEA内置的打包工具 IDEA提供了内置的打包工具,可以方便地将项目打包成可执行文件或者部署包。以下是使用IDEA内置的打包工具的步骤: 在IDEA中打开您的项目。 点击菜单栏的 \”Build\” ->…

    other 2023年10月14日
    00
  • 深入理解Spring Boot属性配置文件

    下面我来介绍一下“深入理解Spring Boot属性配置文件”的完整攻略。 1. 什么是Spring Boot属性配置文件 在Spring Boot应用程序中,属性配置文件主要用于配置应用程序的一些基本信息,例如端口号、日志配置、数据库连接等。Spring Boot属性配置文件支持多种格式,包括.properties、.yml等。 2. 属性配置文件的命名规…

    other 2023年6月25日
    00
  • 图解二叉树的三种遍历方式及java实现代码

    首先我们来了解一下二叉树这个数据结构。二叉树是一种特殊的树形结构,它由一系列节点组成,每个节点最多拥有两个子节点。其中一个节点称为父节点,其两个子节点分别称为左子节点和右子节点。二叉树的遍历指的是按照某种方式依次访问二叉树中的所有节点的过程。常见的二叉树遍历方式有三种,即前序遍历、中序遍历和后序遍历。 一、前序遍历 前序遍历指的是从二叉树的根节点开始,先遍历…

    other 2023年6月27日
    00
  • 从组件封装看Vue的作用域插槽的实现

    下面我会详细讲解“从组件封装看Vue的作用域插槽的实现”的完整攻略。 前置知识 在深入讲解 Vue 的作用域插槽前,需要先了解一下 Vue 的组件封装。组件封装是一个面向对象编程中的重要概念,它将组件中的一些状态和行为封装成一个完整的组件对象,并且通过合理的封装可以让组件具有更好的可复用性和可维护性。 作用域插槽的实现 Vue 的作用域插槽是一个非常重要的功…

    other 2023年6月25日
    00
  • 使用C++递归求解跳台阶问题

    下面是使用C++递归求解跳台阶问题的完整攻略: 问题描述 跳台阶问题是一种经典的数学问题,其描述如下:有n个台阶,每次可以跳1个或2个台阶,求跳到第n个台阶的跳法总数。 解决方法 我们可以使用递归来解决这个问题。递归的思路就是将一个大问题分解为一个或多个小问题,然后再将小问题进一步分解,最终求解出所有小问题并将它们组合起来得到原问题的解。 对于跳台阶问题,我…

    other 2023年6月27日
    00
  • Python 随机生成测试数据的模块:faker基本使用方法详解

    以下是使用标准的Markdown格式文本,详细讲解Python中随机生成测试数据的模块faker的基本使用方法的完整攻略: faker模块的基本使用方法 安装faker模块:在命令行中运行以下命令安装faker模块: bash $ pip install faker 导入faker模块:在Python脚本中导入faker模块,以便使用其中的功能: pytho…

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