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日

相关文章

  • 验证注册用户名必须为字母

    验证注册用户名必须为字母需要考虑以下几个方面: 对用户输入的进行验证 在前端和后端分别进行验证 提供用户友好的错误信息 以下是完整攻略: 步骤一:前端验证用户输入 使用JavaScript可以在浏览器端进行用户输入的验证。可以通过正则表达式匹配字符串,判断用户名是否包含除字母以外的其他字符。以下是一个简单的前端示例代码: function isAlphabe…

    Java 2023年6月15日
    00
  • Java从控制台读入数据的几种方法总结

    下面是“Java从控制台读入数据的几种方法总结”的完整攻略。 一、从控制台读入数据的几种方法 在Java中,可以通过以下几种方式从控制台读入数据: 使用Scanner类读入用户输入数据。 使用BufferedReader类读入用户输入数据。 使用System.in.read()方法读入用户输入的字符。 下面我们将分别详细说明这三种方法的具体使用。 1. 使用…

    Java 2023年5月26日
    00
  • springmvc参数为对象,数组的操作

    在SpringMVC中,我们可以将请求参数封装为对象或数组,并在Controller中进行操作。本文将详细讲解SpringMVC参数为对象、数组的操作的完整攻略,包括如何定义请求参数对象、如何使用@RequestParam注解获取请求参数、如何使用@ModelAttribute注解绑定请求参数、如何使用@RequestBody注解获取请求体、如何使用@Req…

    Java 2023年5月18日
    00
  • Java String类详解_动力节点Java学院整理

    Java String类详解 在Java中,String类是一个非常重要的类。本篇文章将对Java String类进行详细的讲解,包括String类的定义、String类的常用方法、String类与其他数据类型的转换以及String类的不可变性等。 String类的定义 在Java中,String类是一个表示字符串的类。每个字符串都是由多个字符组成的字符序列…

    Java 2023年5月26日
    00
  • Java测试框架Mockito的简明教程

    “Java测试框架Mockito的简明教程”主要介绍了Mockito这个Java测试框架的基本使用方法和注意事项。Mockito旨在简化Java测试的过程,帮助开发者创建并执行相对干净和更方便的测试。 以下是详细的攻略: 什么是Mockito Mockito是一个用于Java测试的框架,用于创建和验证Mock对象。Mock对象是模拟真实对象的测试对象,它们用…

    Java 2023年5月26日
    00
  • Java中jstat命令的使用详解

    Java中jstat命令的使用详解 什么是jstat命令? jstat是一个用于监控Java虚拟机(JVM)统计信息的命令行工具。使用jstat命令可以查看JVM堆、垃圾回收、类加载等方面的实时统计信息。jstat命令可以用于调试JVM性能问题和进行故障诊断。 jstat命令的语法 jstat命令有以下的语法: jstat [option vmid [int…

    Java 2023年5月26日
    00
  • 防止未登录用户操作—基于struts2拦截器的简单实现

    防止未登录用户操作是常见的Web应用程序的安全性需求之一。基于struts2拦截器可以方便地实现这一功能。接下来,我将详细讲解如何基于struts2拦截器实现防止未登录用户操作的功能。 步骤一:创建Session监听器 在Java Web应用程序中,每个会话都关联一个HTTP会话(Session)。Session监听器可以在会话开始和结束时执行操作,我们可以…

    Java 2023年5月20日
    00
  • java 图片验证码的实现代码

    Java 图片验证码是一种难题,其主要目的是为了防止机器人通过自动化工具诈骗某种资源或服务。以下是一个详细的攻略,可以通过使用Java实现验证码图片来完成此过程: 设计验证码生成过程 首先,我们需要定义一些方法,以使用Java的java.awt.image包中的BufferedImage类来生成验证码图像。在创建图像之后,我们将应用特定的文本干扰和颜色干扰来…

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