Java实现几种序列化方式总结

Java实现几种序列化方式总结

什么是序列化

序列化是将对象转换为字节流的过程,目的是为了在网络上传输或者将对象转存储到硬盘等介质中。

Java中的序列化

在Java中,实现序列化需要满足两个条件:一是实现Serializable接口,二是定义一个静态的序列化ID,例如:

import java.io.Serializable;

public class Person implements Serializable {
    private static final long serialVersionUID = 1234567890L;
    private String name;
    private int age;
    // 省略getter和setter
}

Java中几种序列化方式

Java自带的序列化方式

Java自带的序列化方式是将对象转换为二进制格式进行传输。其优点是使用简单,只需实现Serializable接口即可,但是它的缺点也比较明显:

  • 序列化后的数据占用的空间比较大。
  • 序列化后的数据对于人类阅读不友好,也不利于调试。

下面是示例代码:

import java.io.*;

public class JavaSerializerUtil {
    public static <T> byte[] serialize(T object) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(object);
        oos.flush();
        byte[] bytes = baos.toByteArray();
        baos.close();
        oos.close();
        return bytes;
    }

    public static <T> T deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
        ObjectInputStream ois = new ObjectInputStream(bais);
        T object = (T) ois.readObject();
        bais.close();
        ois.close();
        return object;
    }
}

JSON序列化方式

JSON序列化方式是将对象转换为JSON格式进行传输。其优点是数据占用的空间比较小,对于人类阅读友好,也比较利于调试。但是它的缺点是需要引入相关的库进行序列化和反序列化。

下面是示例代码:

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;

public class JsonSerializerUtil {
    private static final ObjectMapper objectMapper = new ObjectMapper();

    public static <T> byte[] serialize(T object) throws IOException  {
        return objectMapper.writeValueAsBytes(object);
    }

    public static <T> T deserialize(byte[] bytes, Class<T> clazz) throws IOException {
        return objectMapper.readValue(bytes, clazz);
    }
}

CSV序列化方式

CSV序列化方式是将对象转换为CSV格式进行传输。其优点是数据占用的空间很小,可以使用Excel等软件进行查看和分析。但是它的缺点是对于复杂类型的序列化和反序列化比较困难。

下面是示例代码:

import com.opencsv.CSVWriter;
import java.io.IOException;
import java.io.StringWriter;

public class CsvSerializerUtil {
    public static String serialize(Person person) throws IOException {
        StringWriter out = new StringWriter();
        CSVWriter writer = new CSVWriter(out);
        String[] line = {person.getName(), String.valueOf(person.getAge())};
        writer.writeNext(line);
        writer.close();
        return out.toString();
    }

    public static Person deserialize(String csv) throws IOException {
        String[] line = csv.split(",");
        Person person = new Person();
        person.setName(line[0]);
        person.setAge(Integer.parseInt(line[1]));
        return person;
    }
}

总结

以上就是Java中几种常用的序列化方式,在选择序列化方式的时候需要根据业务需求进行选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现几种序列化方式总结 - Python技术站

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

相关文章

  • java web实现自动登录

    让我来简单介绍一下 “java web实现自动登录” 的实现方案。 1. 存储登录状态 在用户登录时,可以将该用户的相关登录信息存储到浏览器的 cookie 中,使得用户在下一次访问时无需重新登录,即可直接登录进入系统,这就是所谓的“自动登录”。 1.1 操作流程 1.用户登陆,输入用户名和密码。 2.后台服务器验证用户信息。若验证成功,则生成token(包…

    Java 2023年5月19日
    00
  • SpringBoot整合kafka遇到的版本不对应问题及解决

    下面是关于“SpringBoot整合kafka遇到的版本不对应问题及解决”的完整攻略。 问题描述 在SpringBoot项目中,我们通过kafka实现消息的发送和接收,在整合kafka时,经常会遇到这样的问题,就是当我们在pom.xml文件中配置kafka依赖时,如果选择的版本不正确,就会引发一系列异常。 问题解决 在解决这个问题之前,首先需要了解kafka…

    Java 2023年5月20日
    00
  • SpringBoot上传文件大小受限问题的解决办法

    关于SpringBoot上传文件大小受限问题的解决办法,在此提供完整攻略和两条示例。 问题描述 在SpringBoot的应用中,上传文件大小默认限制为1MB,如果上传的文件超过1MB,就会导致上传失败或无法上传。解决这个问题的方法就是通过设置最大的上传文件大小来解决。 解决办法 SpringBoot提供了两个配置参数来解决上传文件大小的限制问题。 1. 使用…

    Java 2023年5月19日
    00
  • 在IDEA中搭建最小可用SpringMVC项目(纯Java配置)

    以下是关于“在IDEA中搭建最小可用SpringMVC项目(纯Java配置)”的完整攻略,其中包含两个示例。 在IDEA中搭建最小可用SpringMVC项目(纯Java配置) Spring MVC是一个基于Java的Web框架,它可以帮我们快速开发Web应用程序。在IDEA中搭建最小可用SpringMVC项目非常简单,本文将介绍如何使用纯Java配置搭建最小…

    Java 2023年5月17日
    00
  • Spring Security实现退出登录和退出处理器

    下面是Spring Security实现退出登录和退出处理器的完整攻略。 1. Spring Security实现退出登录 在Spring Security中,要实现退出登录功能,需要使用logout()方法。这个方法可以在Spring Security中定义一个LogoutConfigurer来使用。以下是实现退出登录的步骤。 步骤1:在Spring Se…

    Java 2023年5月20日
    00
  • 基于Java实现Socket编程入门

    让我来为大家详细讲解“基于Java实现Socket编程入门”的完整攻略。 什么是Socket编程 Socket编程是网络编程的基础,它允许不同设备之间基于网络相互通信。Socket编程使用TCP和UDP协议来传输数据,它们是传输控制协议(TCP)和用户数据报协议(UDP)。在Socket编程中,设备被称为“主机”或“客户机”。 Socket编程的四个基本任务…

    Java 2023年5月19日
    00
  • 一文彻底搞懂Java和JDK的版本命名问题

    一文彻底搞懂Java和JDK的版本命名问题 Java和JDK的版本命名规则 Java和JDK的版本命名包含三部分:主版本号、次版本号和更新版本号,如:1.8.0、11.0.1等,其中: 主版本号:代表Java/JDK发行的主要版本号,用于标识整个Java/JDK版本的变化,从1开始递增。例如Java 8和Java 11的主版本号分别为1和11。 次版本号:代…

    Java 2023年5月26日
    00
  • Spring Boot应用程序同时支持HTTP和HTTPS协议的实现方法

    下面是关于如何实现Spring Boot应用程序同时支持HTTP和HTTPS协议的完整攻略: 准备工作 在实现HTTPS协议之前,我们需要准备一个SSL证书,可以选择购买正式的SSL证书或者自己生成一个自签名的证书。 在这里,我们示范自签名证书的生成方法: 生成自签名证书 安装openssl工具 在Linux环境中,可以通过包管理器进行安装:比如Ubuntu…

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