java对象序列化操作实例分析

Java对象序列化操作

简介

Java对象序列化是指将Java对象转换为字节流,以便于数据传输、持久化和分布式应用等场景下的使用。其作用是将Java对象序列化为数据流方便在网络间传输或在本地存储,以及反序列化操作使其还原为Java对象。

序列化对象

对于待序列化的Java对象,需要实现 Serializable 接口。以下是一个示例:

import java.io.Serializable;

public class Person implements Serializable {

    private static final long serialVersionUID = 1L;

    private String name;
    private int age;
    private String address;

    public Person(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getAddress() {
        return address;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }
}

序列化操作

在序列化Java对象时,需要使用 ObjectOutputStream 类,以下是一个实现方式:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class SerializeDemo {

    public static void main(String[] args) {

        String filename = "person.ser";

        Person person = new Person("Tom", 25, "Beijing");
        try {
            FileOutputStream fileOut = new FileOutputStream(filename);
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(person);
            out.close();
            fileOut.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Serialized data is saved in " + filename);
    }
}

反序列化操作

在反序列化Java对象时,需要使用 ObjectInputStream 类,以下是一个实现方式:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class DeserializeDemo {

    public static void main(String[] args) {

        String filename = "person.ser";

        Person person = null;
        try {
            FileInputStream fileIn = new FileInputStream(filename);
            ObjectInputStream in = new ObjectInputStream(fileIn);
            person = (Person) in.readObject();
            in.close();
            fileIn.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        System.out.println("Deserialized data: " + person);
    }
}

示例说明

示例1:在一个分布式应用场景下,需要将用户信息从客户端传输到服务器端,需要将用户信息进行序列化并通过网络传输。科学家实现了以下代码实现该功能:

import java.io.*;
import java.net.Socket;

public class ClientInfo {

    public void sendUserInfo(Socket socket, UserInfo userInfo) throws IOException {

        ObjectOutputStream oos;
        oos = new ObjectOutputStream(socket.getOutputStream());

        // 序列化Java对象
        oos.writeObject(userInfo);
        oos.flush();
        oos.close();
    }
}

示例2:一个生产者/消费者架构下的消息传输使用对象序列化操作。生产者将对象通过序列化的方式转成字节数组后传递到消费者端,然后再使用反序列化的方式将其转化为Json数据格式。

import java.io.*;

public class SerializationUtil {

    public static byte[] serialize(Object object) throws IOException {
        try(ByteArrayOutputStream baos = new ByteArrayOutputStream()){
            try(ObjectOutputStream oos = new ObjectOutputStream(baos)){
                oos.writeObject(object);
            }
            return baos.toByteArray();
        }
    }

    public static Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
        try(ByteArrayInputStream bais = new ByteArrayInputStream(bytes)){
            try(ObjectInputStream ois = new ObjectInputStream(bais)){
                return ois.readObject();
            }
        }
    }
}

以上是Java对象序列化操作实例分析的完整攻略,详细介绍了如何在Java中序列化和反序列化对象,并且给出了两个示例说明,可以帮助读者更好的理解和掌握该操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java对象序列化操作实例分析 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java中字节流和字符流的理解(超精简!)

    了解Java中字节流和字符流的区别和使用场景,是Java IO编程的基础。下面我们来详细讲解一下这个问题。 1. 什么是Java中的字节流和字符流? Java IO流分为字节流和字符流两种类型,它们的差别在于输入输出流所处理的数据单元不同:字节流以字节(8 bit)为单位,而字符流以字符为单位(Java中一个字符占2个字节)。 2. Java中字节流 字节流…

    Java 2023年5月27日
    00
  • maven私服搭建与使用教程

    下面是一份 Maven 私服搭建与使用教程的完整攻略。 什么是 Maven 私服? 在一个有多人参与开发的项目中,大家需要在开发过程中使用相同的依赖。如果每个人都单独下载依赖,势必会浪费很多时间和网络资源。为此,我们可以搭建一个 Maven 私服,方便大家在开发过程中使用同一套依赖。 搭建 Maven 私服 1. 下载 Nexus 我们使用 Nexus 来搭…

    Java 2023年5月20日
    00
  • Java中StringBuilder类的介绍与常用方法

    关于Java中StringBuilder类的介绍与常用方法,我为你准备了以下攻略: StringBuilder类的介绍 StringBuilder是在JDK 1.5中引入的一个新类,用于代替StringBuffer。与StringBuffer类似,StringBuilder也被设计成可变的字符串类,在字符串频繁修改的情况下,使用StringBuilder比使…

    Java 2023年5月27日
    00
  • 一句话木马的原理及利用分析(asp,aspx,php,jsp)

    一句话木马(One-Liner PHP Script)是一种脚本程序,通常只有一行,但它可以使攻击者在远程服务器上获得完全控制。攻击者可以利用该程序来窃取数据、利用服务器资源进行攻击、加入僵尸网络等多种攻击。 在不同的开发语言中,一句话木马会有所不同,下面我们分别介绍一下: ASP和ASPX一句话木马 ASP和ASPX一句话木马的原理比较简单,就是将脚本代码…

    Java 2023年6月15日
    00
  • Java毕业设计实战之财务预算管理系统的实现

    Java毕业设计实战之财务预算管理系统的实现 1. 确定项目需求 在设计财务预算管理系统之前,我们需要先明确项目需求,对整个系统的功能、架构、流程等方面有一个清晰的认识。一般而言,一个财务预算管理系统应该包括以下几个方面的功能: 用户登录和权限管理 预算制定和管理功能 预算执行和监控功能 预算分析和报告功能 针对以上需求,我们可以进行一个详细的需求分析,并制…

    Java 2023年5月24日
    00
  • gaussdb 200安装 data studio jdbc idea链接保姆级安装步骤

    下面是详细的 “gaussdb 200安装 data studio jdbc idea链接保姆级安装步骤”攻略: 准备工作 首先需要从官网下载并安装GaussDB 200数据库软件; 安装Java开发环境,假设你已经安装了Java环境,那么请确认你的Java版本号,因为后续需要使用JDBC链接数据库,而不同版本的jdbc驱动有差异; 安装Intellij I…

    Java 2023年6月16日
    00
  • Struts2实现文件下载功能代码分享(文件名中文转码)

    下面是详细的“Struts2实现文件下载功能代码分享(文件名中文转码)”攻略: 1. 背景介绍 Struts2是一个优秀的MVC框架,而文件下载是很多Web项目中常见的需求。本文将介绍如何在Struts2中实现文件下载功能,并且解决中文文件名乱码的问题。 2. 实现步骤 2.1 编写Action 首先,我们需要创建一个Action类,用于处理文件下载请求。该…

    Java 2023年5月20日
    00
  • 一篇带你入门Java垃圾回收器

    一篇带你入门Java垃圾回收器 什么是Java垃圾回收器 Java垃圾回收器(Garbage Collector)是Java虚拟机(JVM)的重要组成部分。它管理内存分配和回收,以确保在应用程序运行期间,不会发生内存泄漏或溢出等问题。 垃圾回收器的工作原理 垃圾回收的核心是判断哪些内存块是“垃圾”,然后将其回收。在JVM中,垃圾回收器通过判断对象是否还被引用…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部