资讯专栏INFORMATION COLUMN

java对象序列化和反序列化

chadLi / 3329人阅读

摘要:序列化对象和平台无关,序列化得到的字节流可以在任何平台反序列化。从文件中或网络上获得序列化的字节流后,根据字节流中所保存的对象状态及描述信息,通过反序列化重建对象。因此意味着不要序列化静态变量不属于对象状态的一部分,因此它不参与序列化。

一.序列化和反序列化
(1)序列化:将内存中的对象转化为字节序列,用于持久化到磁盘中或者通过网络传输。对象序列化的最主要的用处就是传递和保存对象,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存了Java对象的状态以及相关的描述信息。序列化机制的核心作用就是对象状态的保存与重建。
(2)网络传输方式

通过socket,RMI传输数据时需要将对象序列化

(2)反序列化:从字节序列创建对象的过程称为反序列化。序列化对象和平台无关,序列化得到的字节流可以在任何平台反序列化。从文件中或网络上获得序列化的字节流后,根据字节流中所保存的对象状态及描述信息,通过反序列化重建对象。

二.java类序列化
通过实现java.io.Serializable接口,可以在java类中启用序列化。它是一个标记接口,意味着不包含任何接口和字段。仅用于标识可序列化的语义。

三.serialVersionUID
(1)serialVersionUID是一个标识符,主要用于对象的版本控制。
(2)如果java类已经实现了java.io.Serializable接口,那么默认会在类中添加一个serialVersionUID。但是在该类中添加、删除、修改字段都会生存新的serialVersionUID。这样导致序列化到文件中的serialVersionUID和修改后class中的serialVersionUID不一致,造成对象无法恢复。
(3)java序列化的过程依赖正确的serialVersionUID。无论是否改变类中的字段,serialVersionUID都应该保持不变。所以我们应该在类中显示的添加一个serialVersionUID。
(4)通过实验验证serialVersionUID的作用

四.Transient,static,final关键字
(1)该修饰符只适用于变量,不适用于方法和类。如果我们不想序列化特定变量以满足安全约束,那么我们将该变量声明为Transient。执行序列化时,JVM会忽略Transient变量的原始值,将默认值保存到文件中。因此Transient意味着不要序列化
(2)静态变量不属于对象状态的一部分,因此它不参与序列化。因此将在静态变量前添加Transient是无用的。
(3)final变量将直接通过值参与序列化。所以在final变量前添加Transient关键字不会产生任何影响。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75514.html

相关文章

  • java列化和反列化

    摘要:引语平时我们在运行程序的时候创建的对象都在内存中当程序停止或者中断了对象也就不复存在了如果我们能将对象保存起来在需要使用它的时候在拿出来使用就好了并且对象的信息要和我们保存时的信息一致序列化就可以解决了这样的问题序列化当然不止一种方式如下序 引语:     平时我们在运行程序的时候,创建的对象都在内存中,当程序停止或者中断了,对象也就不复存在了.如果我们能将对象保存起来,在需要使用它的...

    snowell 评论0 收藏0
  • java列化和反列化说起

    摘要:从的序列化和反序列化说起序列化是将对象的状态信息转换为可以存储或传输的形式的过程,而相反的过程就称为反序列化。当使用接口来进行序列化与反序列化的时候需要开发人员重写与方法。 从java的序列化和反序列化说起 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程,而相反的过程就称为反序列化。 在java中允许我们创建可复用的对象,但是这些对象仅仅存在j...

    whlong 评论0 收藏0
  • Java 列化和反列化

    摘要:把字节序列恢复为对象的过程称为对象的反序列化。代表对象输入流,它的方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。接口继承自接口,实现接口的类完全由自身来控制序列化的行为,而仅实现接口的类可以采用默认的序列化方式。 把对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为对象的过程称为对象的反序列化。    对象的序列化主要有两种用途:   1) 把...

    jcc 评论0 收藏0
  • springboot学习(三)——使用HttpMessageConverter进行http列化和反

    摘要:序列化反序列化主要体现在程序这个过程中,包括网络和磁盘。如果是开发应用,一般这两个注解对应的就是序列化和反序列化的操作。协议的处理过程,字节流内部对象,就涉及这两种序列化。进行第二步操作,也就是序列化和反序列化的核心是。 以下内容,如有问题,烦请指出,谢谢! 对象的序列化/反序列化大家应该都比较熟悉:序列化就是将object转化为可以传输的二进制,反序列化就是将二进制转化为程序内部的...

    stackfing 评论0 收藏0
  • Java IO (三) 读取其他进程数据,RandomAccessFile,列化和反列化

    摘要:虚拟机读取其他进程的数据对象的方法可以运行平台上的其他程序该方法产生一个对象对象代表由该程序启动启动的子进程类提供如下三个方法用于和其子进程通信获取子进程的错误流获取子进程的输入流获取子进程的输出流这里的输入流输出流容易混淆从程序的角度思考 Java虚拟机读取其他进程的数据 Runtime对象的exec方法可以运行平台上的其他程序,该方法产生一个Process对象,Process对象...

    zhangfaliang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<