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日

相关文章

  • C#控件闪烁的解决方法

    C#控件闪烁的解决方法攻略 控件闪烁是指控件在重绘时出现的明显的闪烁现象,这种现象会对用户造成视觉上的不适,因此应该尽可能地避免。下面是几种常用的解决控件闪烁的方法。 双缓冲技术 双缓冲技术是指在一个缓冲区绘制好需要显示的内容后,再将缓冲区的内容一次性绘制到屏幕上,这样可以减少不必要的重绘而避免控件闪烁。 下面是使用双缓冲技术的一个示例: public cl…

    other 2023年6月27日
    00
  • SpringBoot获取yml和properties配置文件的内容

    Spring Boot 是一款基于 Spring 框架的快速 Web 开发工具,可以非常方便的实现 Web 服务的快速搭建,其中获取 yml 和 properties 配置文件的内容也是非常常见的操作。下面就是关于该操作的完整攻略: 获取 yml 文件中的配置项 获取 yml 文件中的配置项可以通过 @ConfigurationProperties 注解来实…

    other 2023年6月25日
    00
  • 什么是域和域控制器 Windows 2003域控制器设置/客户端安装及问题处理

    域和域控制器 简介 在计算机网络中,域是指一组计算机、用户和设备的集合,可以通过集中的管理方式来管理这些计算机、用户和设备。域控制器是用于管理域的服务器,它处理登录验证、资源访问控制、用户和计算机的管理等任务。 Windows 2003域控制器设置 系统要求 Windows Server 2003 操作系统 确保计算机符合硬件要求 如果需要远程管理域控制器,…

    other 2023年6月25日
    00
  • datagridview中添加checkbox和常用处理方式.

    DataGridView中添加Checkbox和常用处理方式 DataGridView是.NET Framework中常用的控件之一,它可以用于显示和编辑数据。在DataGridView中添加Checkbox可以方便地进行多选操作。本文将详讲解如何在DataGridView中添加Checkbox以及常用的处理方式。 添加Checkbox 在DataGridV…

    other 2023年5月7日
    00
  • Android中RecyclerView嵌套滑动冲突解决的代码片段

    当在Android中使用RecyclerView嵌套滑动时,可能会遇到滑动冲突的问题。这种冲突通常发生在嵌套的RecyclerView之间,或者在RecyclerView和其他可滑动的视图之间。下面是解决这个问题的完整攻略,包含两个示例说明。 1. 使用NestedScrollView解决RecyclerView嵌套滑动冲突 如果你的RecyclerView…

    other 2023年7月28日
    00
  • Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)

    下面是详细的讲解。 Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign) 在Vue项目中使用了AntDesign组件库的Table组件,在表格的某些字段需要可以快捷的执行一些操作,此时需要一种右键菜单来提供一些行内的操作选项。 前置条件 在本文中实现右键菜单的方法需满足以下条件: Vue.js 2.x AntDesign Vue…

    other 2023年6月27日
    00
  • 微信小程序开发中生命周期的详细介绍

    关于微信小程序开发中生命周期的详细介绍 1. 生命周期概述 小程序的生命周期是指在小程序运行时,各个页面或组件经历的一系列事件,这些事件主要包括:onLoad、onShow、onReady、onHide、onUnload等。开发者可以在这些事件中编写相应的处理逻辑以实现更加丰富的用户交互效果。 2. 生命周期详解 onLoad(options):在页面载入时…

    other 2023年6月27日
    00
  • Java类初始化执行流程解析

    下面我来详细讲解Java类初始化执行流程解析的完整攻略。 Java类初始化执行流程解析 在Java中,类初始化是Java程序中的一个重要的概念,因为在Java程序运行时,只要有类被使用了,就会触发类的初始化。类初始化这个过程对Java程序的运行至关重要,因此,我们有必要深入了解Java类初始化执行过程,以便更好地理解Java程序运行过程。 一、类初始化的触发…

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