iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java中的实体类为什么要 implements Serializable?
  • 438
分享到

Java中的实体类为什么要 implements Serializable?

javajson序列化和反序列化Serialzable 2023-09-02 13:09:32 438人浏览 薄情痞子
摘要

1. 序列化和反序列化 首先来解释一下什么是序列化和反序列化: 序列化:把对象转换为字节序列的过程称为对象的序列化。反序列化:把字节序列恢复为对象的过程称为对象的反序列化。 在 Java 和其他语言进行通信的时候,需要将对象转化成一种通用的

1. 序列化和反序列化

首先来解释一下什么是序列化和反序列化:

序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。

  • 在 Java 和其他语言进行通信的时候,需要将对象转化成一种通用的格式例如JSON( 转换成大家都认识的对象 ),从对象到 json 字符串的转换过程就是序列化的过程,反过来, 从 Json 字符串转换成 Java 对象的过程就是反序列化的过程。
  • 当 Java 需要把一个对象的状态保存到文件或者是数据库的时候,就是数据存取的过程中的中间过程,就需要序列化。我们可以把序列化的过程理解为 "freeze",它将一个 Java 对象 freeze,然后进行存储;等到再次需要的时候,再将这个对象 "de-freeze" 就能使用了。

2. 为什么要 implements Serialzable?

  • 一个类只有实现了 Serializable 接口,它的对象才是可序列化的。因此如果要序列化某些类的对象,这些类就必须实现 Serializable 接口。而实际上,Serializable 的源码是一个空接口,没有什么具体内容,它的目的只是简单的标识一个类的对象可以被序列化
  • serialization 允许你将实现了 Serializable 接口的对象转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象

3. 那么什么情况下需要实现序列化?

  • 把内存中的对象写入到硬盘。例如,你的内存不够用了,那计算机就要将内存里面的一部分对象暂时的保存到硬盘中,等到要用的时候再读入到内存中,硬盘的那部分存储空间就是所谓的虚拟内存。再例如,你要将某个特定的对象保存到文件中,隔几天在把它拿出来用,那么这时候就需要实现 Serializable 接口。
  • 使用套接字在网络上传送对象,通常情况下你可以在 server 端用获取 Socket 的 outputstream inputstream,将取得的数据处理成字符串发送到客户端,然后在客户端拆分字符串,但是这样显然会降低效率,于是你可以将 server 端数据 包装 成一个 class implements Serializable,然后直接用objectoutputstream,objectinputstream 直接传递。
  • 通过 Java的 RIM(remote method invocation)传输对象。RMI 允许对象在本机上可以一样操作远程机器上的对象。当发送消息给远程对象时,就需要用到 serializaiton 机制来发送参数和接收返回值。

实体类实现序列化的目的:

  • 一是便于存储
  • 二是便于传输

像 boolean 、int、long 类型等,都是基本数据类型,数据库里面有与之对应的数据结构。从类声明来看,我们以为的没有进行序列化,其实是在声明各个不同变量的时候,由具体的数据类型帮助我们实现了序列化操作。所以就算我们不实现 serializable 依旧可以正常操作。

如果平时留意的话,我们会发现序列化操作用于存储时,一般是对于 NoSQL 数据库,而在使用 Nosql 数据库进行存储时,如 Redis,它就没有 varchar,int 之类的数据结构。 而在没有的情况下,我们又确实需要进行存储,那么我们就需要将对象进行序列化。

4. 为什么要显示声明 serialVersionUID

serialVersionUID 的作用是验证序列化和反序列化的过程中,对象是否保持一致。所以在一般情况下我们需要显示的声明serialVersionUID。如果接受者加载的该对象的类的 serialVersionUID 和发送者的类版本号不同的话,反序列化会爆出 InvalidClassException 错误。

什么时候会导致报出这个错误呢?例如在没有显示声明版本号的时候,先将对象进行了序列化;然后不管出于什么目的,该对象的类被修改了,哪怕仅仅是添加了一个强制转换,或者将一个 public 的属性给私有化了,都会影响版本号。此时在这个环境下用反序列化的方法读取以前序列化之后存储起来的对象是会报错的。

@Datapublic class Student implements Serializable {    private static final long serialVersionUID = 1L;    @TableId("id")    private Integer id;    @TableField("name")    private String name;    @TableField("age")    private Integer age;}

来源地址:https://blog.csdn.net/weixin_45410366/article/details/126618512

--结束END--

本文标题: Java中的实体类为什么要 implements Serializable?

本文链接: https://www.lsjlt.com/news/390769.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中的实体类为什么要 implements Serializable?
    1. 序列化和反序列化 首先来解释一下什么是序列化和反序列化: 序列化:把对象转换为字节序列的过程称为对象的序列化。反序列化:把字节序列恢复为对象的过程称为对象的反序列化。 在 Java 和其他语言进行通信的时候,需要将对象转化成一种通用的...
    99+
    2023-09-02
    java json 序列化和反序列化 Serialzable
  • java中为什么要实现Serializable序列化接口
    我们在学习JavaSE的时候学习过ObjectInputStream和ObjectOutputStream,当时是觉得只要一个对象要写入文件就必须要实现Serializable接口。其实这样理解完全没有问题。一、问题引入Java中为什么要实...
    99+
    2019-01-18
    java教程 java 实现 Serializable 序列化 接口
  • java项目中的实体类为什么需要实现序列化
    这篇文章给大家介绍java项目中的实体类为什么需要实现序列化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。当客户端访问某个能开启会话功能的资源,web服务器就会创建一个HTTPSession对象,每个HTTPSessi...
    99+
    2023-05-31
    java 实体类 序列化
  • Java中为什么需要内部类
    这篇文章给大家分享的是有关Java中为什么需要内部类的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。内部类:定义在类的内部的类为什么需要内部类?典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其...
    99+
    2023-06-17
  • 浅析Java中为什么要设计包装类
    目录一、为什么需要包装类二、装箱与拆箱三、不简单的Integer.valueOf四、Object类可以接收所有数据类型五、包装类在集合中的广泛使用六、数据类型转换一、为什么需要包装类...
    99+
    2022-11-12
  • java克隆实体类的方法是什么
    在Java中,要克隆一个实体类对象,可以使用以下三种方法:1. 实现Cloneable接口并重写clone()方法:Cloneabl...
    99+
    2023-08-18
    java
  • java实体类删除字段的方法是什么
    在 Java 中,要删除实体类中的字段,可以通过以下方法之一进行操作:1. 手动删除字段:在实体类中直接删除对应的字段声明及其相应的...
    99+
    2023-09-26
    java
  • java实体类设置时间的方法是什么
    在Java中,可以使用`java.time`包中的类来设置时间。具体地,可以使用`LocalDateTime`类来设置日期和时间,使...
    99+
    2023-08-15
    java
  • java动态生成实体类的方法是什么
    Java动态生成实体类的方法有以下几种:1. 使用反射机制动态生成实体类:可以通过Java的反射机制,使用Class对象的newIn...
    99+
    2023-08-15
    java
  • java判断实体对象为空的方法是什么
    Java判断实体对象是否为空的方法有多种方式,以下是其中一些常用的方法:1. 使用if语句判断对象是否为空:```javaif (o...
    99+
    2023-09-16
    java
  • 为什么Java中要求超大整数禁止使用Long类型返回
    本篇内容主要讲解“为什么Java中要求超大整数禁止使用Long类型返回”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“为什么Java中要求超大整数禁止使用Long类型返回”吧!错误演示创建一个 S...
    99+
    2023-06-16
  • 为什么 Java 框架中的 Path 索引如此重要?
    在 Java 开发中,我们经常会使用 Path 索引来访问和操作文件和目录。Path 索引在 Java 框架中扮演着非常重要的角色,本文将从几个方面介绍 Path 索引的重要性。 跨平台兼容性 Java 的最大特点之一就是跨平台兼容性...
    99+
    2023-06-26
    框架 path 索引
  • 为什么Go语言中的Windows数据类型如此重要?
    在Windows系统中,数据类型是非常重要的。这是因为Windows系统使用了许多特定的数据类型来处理各种不同的数据。在Go语言中,同样也有许多特定的数据类型可以用来处理Windows系统中的数据。本文将介绍为什么在Go语言中使用Wind...
    99+
    2023-09-12
    windows 数据类型 关键字
  • JAVA动态给实体类添加属性的方法是什么
    在Java中,实体类是指用于表示现实世界中的实体的类。一般情况下,实体类的属性是在类的定义中固定的,无法动态添加。然而,可以使用Ja...
    99+
    2023-10-18
    JAVA
  • 为什么Java编程中的算法设计如此重要?
    Java是一种广泛使用的编程语言,它被用于开发各种应用程序和网站。在Java编程中,算法设计是非常重要的一个方面,因为它可以帮助程序员更有效地解决问题,提高程序的效率和性能。在本文中,我们将探讨为什么Java编程中的算法设计如此重要,并演示...
    99+
    2023-09-12
    编程算法 unix path
  • 为什么Java中打包接口和对象是必要的?
    Java是一种面向对象的编程语言,其优秀的特性包括可重用性、可维护性、可扩展性和安全性。在Java中,打包接口和对象是必要的,这篇文章将探讨为什么这些步骤是必要的,并提供一些演示代码。 一、什么是打包接口和对象? 在Java中,打包接口和对...
    99+
    2023-07-23
    打包 接口 对象
  • 为什么PHP+Java的开发中不要太面向对象
    为什么PHP+Java的开发中不要太面向对象,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。说起面向对象,现在很多语言多少都有一些。Java是传统的面向对象语言,...
    99+
    2023-06-17
  • Vue中为什么要引入render函数的实现
    目录前言背景原理后记前言 使用Vue脚手架创建项目的入口文件main.js中,默认代码如下: import Vue from 'vue' import App from './App...
    99+
    2022-11-12
  • 为什么在HTTP索引中使用Java对象是必要的?
    HTTP 索引是一种用于存储和查询信息的数据结构。通常情况下,我们使用 HTTP 索引来存储和查询文本数据,但是在某些场合下,我们需要存储和查询 Java 对象。本文将探讨为什么在 HTTP 索引中使用 Java 对象是必要的,并演示如何使...
    99+
    2023-09-13
    对象 http 索引
  • 为什么Java Spring中的缓存编程算法如此重要?
    Java Spring框架中的缓存编程算法是非常重要的。缓存是一种将数据存储在更快速、更容易访问的存储器中的技术。在Java Spring中,我们可以使用缓存技术来提高应用程序的性能和响应速度。然而,如果我们不使用正确的缓存编程算法,我们可...
    99+
    2023-09-03
    spring 缓存 编程算法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作