java 序列化接口_Java中的Serializable接口的序列化和反序列化的认识-程序员宅基地

技术标签: java 序列化接口  

在这里提出Serializable的应用场景。serialVerisonUID值是什么,以及其作用。

1.序列化和反序列化的应用场景

一、序列化和反序列化通过运用于实现RPC架构中,将一个对象转化字节流在网络中进行传输或存入数据库、硬盘中。例如:JSON对象需要转化为字节码进行网络传输。如MyBatis进行对象持久化时,其接口传入自定义对象后,将对象的属性进行序列化成字节码存入数据库。

二、在实现对象的深克隆中,也应用java对象序列化的形式进行。

2.在序列化中的实际应用使用

一、在java.lang.String类,其实现了对其Serializable接口,并且其自定义了serialVersionUID属性。代码如下:

public final class String

implements java.io.Serializable, Comparable, CharSequence {

/** The value is used for character storage. */

private final char value[];

/** Cache the hash code for the string */

private int hash; // Default to 0

/** use serialVersionUID from JDK 1.0.2 for interoperability */

private static final long serialVersionUID = -6849794470754667710L;

其serialVersionUID作用是:实现了Serializable接口的类,在进行对象创建的时候,JVM会自动帮忙进行对象的序列化操作,并且会根据其类的属性情况生成一个serialVersionUID(该属性可以理解为,当前类版本的信息)。在进行对象反序列化操作时,JVM会根据对象字节码生成对应的Java对象的同时,会生成当前类版本的serialVersionUID。并且比较序列化前和反序列化后的serialVersionUID,如果两种serialVersionUID相同,即可证明序列化成功。否则序列化失败,并会抛出异常。(这种在实际开发中也会遇到,1、在开发RPC服务中,由于可能出现修改了类,没及时进行同步到每台服务器中,导致部分服务器对对象字节码无法正常反序列化成对应的对象。2、也有可能类进行迭代中,添加了部分属性,导致原本存在硬盘中的字节码对象进行序列化不成功。)

所有,在String类中,其通过自定义一个Static类型的serialVersionUID,保证不管如何JVM生成的serialVersionUID都是被serialVersionUID所替代,保证序列化和反序列化生成的serialVerisonUID都相同,不会抛出相应的异常。

3、序列化由那些属性不能被序列化的

一、被static修饰的类属性是不能被序列化的,因为该属性初始化前与对象的生成,所有jvm再对象生成时不进行序列化。

二、被transient修饰的属性是不能被序列化的。

今天天气还好晴天,但啊展内心压力庞大,就因找工作问题导致心烦意乱,顿时感觉人生迷茫。打算开始边不断投简历,不断写相应的技术博客,不断的准备公务员考试。不管以后会不会继续走it,能不能让我走it,我都不会放掉我个人的技能。只希望不负付出的努力,不负韶华。道路千万条,认真走好自己的路我就觉得可以了,但人生可能就是在调戏你,考验你。但还是放好心态,坚持或许就会有吧。“或许“也是一种希望吧。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39989222/article/details/114400726

智能推荐

Linux虚拟化2(tun)_linux tun mtu-程序员宅基地

文章浏览阅读797次。首先来看一下物理设备上的数据如何是通过Linux网络协议栈送到用户态程序的,如图:物理网卡收到数据后送到网络协议栈,进程通过socket创建特殊套接字,从网络协议栈读取数据。在网络协议栈看来,tun/tap这类虚拟网络设备和物理网卡并无区别。tun/tap设备就是利用Linux的设备文件实现内核态和用户态的数据交互,如图:物理网卡通过网线收发数据,而tun/tap通过设备文件(/dev/tunX)收发数据。所有对/dev/tunX的写操作会通过tun设备转成数据包发送给内核网络协议栈;当内核发包给tu_linux tun mtu

SQL中 JOIN 的两种连接类型:内连接(自然连接、自连接、交叉连接)、外连接(左外连接、右外连接、全外连接)_sql注入join连接-程序员宅基地

文章浏览阅读1k次。3、内连接要求相等的分量,不一定是公共属性,自然连接要求相等的分量必须是公共属性;自然外连接分为自然左外连接和自然右外连接.匹配条件也是由系统自动指定.在MySQL中,可通过求左外连接与右外连接的合集来实现全外连接。自然内连接其实就是内连接,这里的匹配条件是由系统自动指定.2、内连接不把重复的属性除去,自然连接要把重复的属性除去;4、内连接不把重复的属性除去,自然连接要把重复的属性除去。–自然内连接 natural inner join。1、自然连接一定是内连接,内连接不一定是自然连接;_sql注入join连接

python+opencv+EAST做自然场景文本检测_python east-程序员宅基地

文章浏览阅读1w次,点赞7次,收藏37次。英文原文链接:https://www.pyimagesearch.com/2018/08/20/opencv-text-detection-east-text-detector/提醒:作者实现的python的文本检测基于OpenCV的官方C ++示例;在将其转换为Python时遇到了一些麻烦。首先,Python中没有Point2f 和RotatedRect函数,因此,无法100..._python east

HTML中表格标签_html中关于表格所有的标签-程序员宅基地

文章浏览阅读211次。<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>表格</title> <style> table{/*为页面中所有table标签添加样式*/ border: black 1px solid; width: 800px;/*设置表格宽度*/ margin: 0 auto;/*设置表格水平居中*/ bord_html中关于表格所有的标签

Kerberos技术实践V1.0_kerberos_patch 1.0-程序员宅基地

文章浏览阅读680次。Kerberos技术实践_kerberos_patch 1.0

SolrQuery实现高亮显示_sql query highlighting-程序员宅基地

文章浏览阅读515次。@Test public void testHighLightingQuery() throws SolrServerException, IOException{ // 初始化solrj服务 HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/c..._sql query highlighting

随便推点

DedeCMS {dede:field name='array' /}的用法_dedecms {dede:field name='id' function="litimgurls-程序员宅基地

文章浏览阅读2.5k次。field支持用array获取任意字段的值。(支持标记:文章列表模板的 {dede:field name='array' /}、arclist、arclistsg、loop、sql 标签) 例如平时使用{dede:field name='title' /}就可以使用{dede:field name='array' runphp='yes'} @me=@me['title'];_dedecms {dede:field name='id' function="litimgurls(@me)"/}在哪里改

python中pycharm的安装与使用方法_python main.py --seed 123 怎么在命令行添加pycharm-程序员宅基地

文章浏览阅读224次。1.首先要有安装包,进行解压2.在普通用户下安装,执行./pycharm.sh脚本3.脚本运行后会出现以下界面4.接受协议,点击continue5.选择don’t send6.选择你喜欢的一种界面7.创建软连接,以后在启动pycharm只需在命令行输入charm启动即可8.创建一个新的工程9.创建路径10.安装必要的插件系统统默认是使用的python2版本..._python main.py --seed 123 怎么在命令行添加pycharm

FileReader:读取文件内容_filereader读取文件内容-程序员宅基地

文章浏览阅读2.1k次。FileReader:读取文件内容1.readAsText():读取文本文件(可以使用Txt打开的文件),返回文本字符串,默认编码是UTF-82.readAsBinaryString():读取任意类型的文件。返回二进制字符串。这个方法不是用来读取文件展示给用户看,而是存储文件。例如:读取文件的内容,获取二进制数据,传递给后台,后台接收了数据之后,再将数据存储3.readAsDataURL():读取文件获取一段以data开头的字符串,这段字符串的本质就是DataURL.DataURL是一种将文件(这个文_filereader读取文件内容

UML关系图_音乐网站排行uml图-程序员宅基地

文章浏览阅读179次。UML关系关联关系即两个类互相包含,使用双向箭头表示 依赖关系即方法参数上的依赖,使用虚线箭头表示,其中箭头指向部分 聚合关系即部分与整体之间的关系,如类A中有属性值为B,使用 菱形空心箭头表示其中空心端为整体组合关系也是部分与整体之间的关系,与聚合关系的区别在于组合中部分单独存在没有意义,部分需要依赖于整体才能存在,使用菱形实心箭头表示其中实心端为整体 泛化关系即..._音乐网站排行uml图

MyEclipse莫名其妙打不开*.xml文件-程序员宅基地

文章浏览阅读3.9k次。今天要打开struts.xml文件时莫名其妙报错,试了几种方法都没用:后来用了一下方式打开:鼠标放在待打开xml文件,点击右键,然后选择open with。。。选择MyEclipse Struts2 configeditor即可!

java打印乘法口诀_java从键盘输入一个1到之间的数,如若输入6则打印六六乘法表-程序员宅基地

文章浏览阅读547次。一直以为打印乘法口诀要用两个for循环,今天发现用一个for循环就能达到同样的效果,java代码如下://打印乘法口诀public class multiTable { //主函数 public static void main(String[] args) { // 一个for循环,两个参数实现了循环的嵌套效果 for (int i = 1, j = 1; j <= 9;_java从键盘输入一个1到之间的数,如若输入6则打印六六乘法表