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生成图片验证码功能

    下面是详细讲解”Java生成图片验证码功能”的完整攻略: 1. 确定需求 首先,我们需要明确这个功能的需求,即在Java Web应用中生成一个随机的图片验证码,以用于用户填写和校验,防止机器人攻击或恶意提交。 2. 添加依赖 接下来,我们需要添加相关的依赖。Java中生成图片验证码需要用到jcaptcha这个开源工具包,我们可以在pom.xml中添加它的依赖…

    Java 2023年6月15日
    00
  • 比较详细的关于javascript 解析json的代码

    当我们获取到JSON格式的数据时,需要将其解析为JavaScript对象才能够方便地操作和使用其数据。下面详细解析一下JavaScript如何解析JSON格式的数据。 1. JSON的基本结构 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它是基于JavaScript的一个子集,但是独立于编程语言。 JSON的基…

    Java 2023年5月26日
    00
  • Java 设计模式中的策略模式详情

    Java 设计模式中的策略模式 策略模式基础概念 策略模式是一种行为型设计模式,它能让你定义一些算法并将其封装到具有公共接口的独立类中。由于所有策略类都实现了相同的接口,因此它们可以自由地相互替换。 策略模式的结构 策略模式的核心在于定义一个策略接口(Istrategy),所有的算法都实现这个接口;然后定义一个上下文类(Context),这个上下文类有一个策…

    Java 2023年5月19日
    00
  • spring boot整合mybatis+mybatis-plus的示例代码

    下面我给您讲解一下“spring boot整合mybatis+mybatis-plus的示例代码”的完整攻略。 步骤1 – 添加依赖 首先,我们需要在 pom.xml 中添加以下依赖: <!– Spring Boot Mybatis Starter –> <dependency> <groupId>org.mybati…

    Java 2023年5月20日
    00
  • Java中的JUnit是什么?

    JUnit是Java中最受欢迎的测试框架之一,用于编写单元测试。在软件开发中,单元测试是用于测试小部分代码的实践,以确保它们能够按照预期进行工作,同时也是保证代码质量和可维护性的重要步骤。在本文中,我们将详细讲解JUnit的各个方面,从安装到使用。 安装 JUnit可以通过Maven在Java项目中安装,只需要在项目的pom.xml文件中添加以下依赖项即可:…

    Java 2023年4月27日
    00
  • Spring 整合 MyBatis的实现步骤

    当我们要在Spring中使用MyBatis时,我们需要完成以下几个步骤。在这里,我将详细讲解整合步骤及相关示例。 1.添加依赖项 第一步是将必要的依赖项添加到项目中。我们需要添加Spring和MyBatis的依赖项,以及与他们相关的数据库驱动。这里我给出一个示例的pom.xml文件。 <dependencies> <!– Spring -…

    Java 2023年6月3日
    00
  • 使用Java8进行分组(多个字段的组合分组)

    使用Java8进行分组的完整攻略如下: 准备数据 首先要确保有可用的数据。以下是一个示例数据集: List<Order> orders = Arrays.asList( new Order("A001", BigDecimal.valueOf(100), "2021-01-01", "User1&…

    Java 2023年5月26日
    00
  • Springboot maven plugin插件原理及作用

    SpringBoot Maven Plugin是一个Maven插件,它提供了各种功能来帮助我们创建和打包SpringBoot应用程序。 插件的作用 SpringBoot Maven Plugin可以帮助我们完成以下任务: 打包spring boot应用程序; 运行spring boot应用程序; 生成Spring Boot应用程序的运行脚本; 单元测试; 生…

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