java对象序列化与反序列化的默认格式和json格式使用示例

Java对象序列化和反序列化是Java中常用的数据交换方式,其中序列化是将Java对象转换为字节流,可以储存到文件或网络流中,反序列化则是将字节流转换为Java对象。在Java中,序列化和反序列化的默认格式是二进制格式,而JSON格式则更加通用并且易于阅读。

默认格式的使用示例

序列化

当我们需要将一个Java对象进行序列化时,我们可以使用 ObjectOutputStream 对象,该对象提供了一个 writeObject 方法,该方法可以将一个对象序列化。

public class Person implements Serializable {
    private String name;
    private int age;

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

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

上述代码中,我们定义了一个人的类 Person,并实现了 Serializable 接口。现在我们希望将一个 Person 对象实例进行序列化:

Person person = new Person("Alice", 25);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.obj"));
oos.writeObject(person);
oos.close();

我们将一个 Person 对象实例进行了序列化,并将其写入到了文件系统中。

反序列化

当我们需要从文件系统或者网络中读取序列化的对象时,我们可以使用 ObjectInputStream 对象进行反序列化操作。该对象提供了一个 readObject 方法,可以反序列化一个对象:

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.obj"));
Person person = (Person) ois.readObject();
System.out.println(person.getName()); // 输出:Alice
System.out.println(person.getAge()); // 输出:25
ois.close();

我们使用 ObjectInputStream 对象的 readObject 方法,从文件系统中读取了一个序列化的 Person 对象,并成功反序列化成了一个 Java 对象。

JSON格式的使用示例

JSON 格式是一种轻量级、易于阅读的数据交换格式,其具有以下优点:

  • 易于阅读和编写。
  • 开源的文本格式,独立于语言和平台。
  • 语法简单,易于理解。

在Java中,我们可以使用各种第三方插件来将 Java 对象和 JSON 格式相互转换,其中比较流行的插件有 Google 提供的 Gson 以及阿里巴巴提供的 FastJson。以下是以 Gson 的使用为例的说明:

序列化

使用 Gson 序列化 Java 对象为 JSON 格式,只需要导入相关第三方包,然后通过 Gson 对象的 toJson 方法即可实现。

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class Person {
    private String name;
    private int age;

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Person person = new Person("Alice", 25);
Gson gson = new GsonBuilder().create();
String json = gson.toJson(person);
System.out.println(json); // 输出:{"name": "Alice", "age": 25}

反序列化

使用 Gson 将 JSON 格式反序列化为 Java 对象也非常简单。和序列化一样,只需要使用相关的 Gson 对象即可完成。

String json = "{\"name\": \"Alice\", \"age\": 25}";
Gson gson = new GsonBuilder().create();
Person person = gson.fromJson(json, Person.class);
System.out.println(person.getName()); // 输出:Alice
System.out.println(person.getAge()); // 输出:25

上述代码使用 Gson 对象的 fromJson 方法将 JSON 字符串转换成了 Person 对象,并成功地反序列化了 Java 对象。

总的来说,Java对象序列化和反序列化是 Java 编程中重要的知识点之一。理解其默认的序列化格式和 JSON 格式,可以帮助我们更好地进行对象间数据交换,进而实现更多有价值的编程需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java对象序列化与反序列化的默认格式和json格式使用示例 - Python技术站

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

相关文章

  • vue 实现axios拦截、页面跳转和token 验证

    下面我将详细讲解“Vue 实现 Axios 拦截、页面跳转和 Token 验证”的完整攻略。 简介 在 Vue 中,我们常常使用 Axios 发起网络请求。而为了保证数据的安全性和用户的登录状态,我们需要进行拦截、跳转和 Token 验证。下面是具体的实现步骤。 实现步骤 1. 安装依赖 首先,需要在项目中安装两个依赖:axios 和 vue-router。…

    Java 2023年6月16日
    00
  • Java接口中尽量避免使用数组

    Java接口是一种定义方法签名的语法机制,虽然接口中也可以定义属性,但是定义属性的意义不是很大,因为接口中定义的属性默认都是常量,并且在接口实现类中无法修改。在接口中定义方法时,实现类中必须实现接口中定义的所有方法。在这种情况下,如果接口中使用数组,将会带来一系列问题。接下来,将为大家讲解“Java接口中尽量避免使用数组”的完整攻略。 为什么Java接口中尽…

    Java 2023年5月26日
    00
  • javaweb实现在线支付功能

    针对“javaweb实现在线支付功能”的完整攻略,下面是一份详细的解释: 1. 概述 在 javaweb 中实现在线支付功能,需要借助第三方支付平台的支持。目前市面上有许多第三方支付平台可供选择,如支付宝、微信支付、银联支付等,本文以支付宝为例,介绍如何在 javaweb 中实现在线支付功能。 2. 前置条件 在开始之前,我们需要先获得支付宝的接口文档,并获…

    Java 2023年5月19日
    00
  • springboot的缓存技术的实现

    下面我就详细讲解“springboot的缓存技术的实现”的完整攻略。 什么是springboot的缓存技术 springboot是一款非常流行的Java开发框架,其提供了很多缓存技术的支持,这些技术可以帮助我们提高应用程序的性能。 在springboot中,我们可以通过使用缓存注解来实现缓存技术。缓存注解可以帮助我们在方法调用时自动缓存方法的返回值,从而实现…

    Java 2023年5月15日
    00
  • Spring Boot 中该如何防御计时攻击

    计时攻击是一种通过测量响应时间来推断出某些操作是否成功的方式。在Web应用程序中,计时攻击可以被用于探测密码的正确性、窃取加密令牌的密钥或破解加密算法等。 Spring Boot应用程序中要防御计时攻击,可以采取以下措施: 引入 Thymeleaf应用模板引擎,并且使用它提供的 th:if 和 th:unless 指令来控制用户输入的数据。示例代码如下: &…

    Java 2023年5月19日
    00
  • CSS模块化设计——从空格谈起

    CSS模块化设计是指将CSS代码划分为独立的模块,每个模块只负责一部分样式,极大地提升了CSS代码的可维护性、可读性。本文将从空格入手,讲解CSS模块化设计的完整攻略。 第一步:空格命名法 CSS模块化设计中,空格命名法是基础。首先,我们将整个页面划分为不同的块,然后为每个块定义唯一的类名。例如,我们有一个页面包含了一个头部、一个内容块和一个侧边栏,则可以这…

    Java 2023年6月15日
    00
  • java中Spring Security的实例详解

    Java中Spring Security的实例详解 前言 Spring Security 是一个强大而灵活的框架,用于在 Java 应用程序中实现认证和授权。它可以与许多不同的身份验证和授权方案一起使用,因此可以适应广泛的需求。本文将介绍 Spring Security 的概念和用法,并提供两个基于 Spring Security 的示例。 Spring S…

    Java 2023年5月20日
    00
  • 详解Java前缀树Trie的原理及代码实现

    详解Java前缀树(Trie)的原理及代码实现,下面是完整攻略: 1. 前缀树(Trie)的原理 前缀树,又叫字典树,是一种以树形结构来存储查询词条或单词的查找树。它的根节点不包含字符,每一个代表字符串中一个字符的节点内包含一个字符,从根节点到某一个节点的路径上经过的字符串连接起来即为该节点表示的字符串。 前缀树的查询通常是从根节点开始,根据查询词的字符在树…

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