序列化,反序列化

系统管理员 2022-05-16 12:13 468阅读 0赞

序列化:
对象的序列化主要有两种用途:
  1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
  2) 在网络上传送对象的字节序列。

  1.   在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。
  2.   当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。
  3. implements java.io.Serializable 或者 implements Java.io.EnSerializable
  4. Serializable的子集。
  5. EnSerializable完全由自身控制序列化的方式,而父类Serializabe是按照默认的方式进行序列化。也就是:
  6. //创建一个流对象
  7. FileOutputStream out = new FileOutputStream( "C:\\temp\\test" );
  8. //利用刚刚的流文件创建对象序列化流文件
  9. //一般情况下都是这两个流
  10. ObjectOutputStream serializer = new ObjectOutputStream(out);
  11. //然后写入文件——》写入的是对象
  12. serializer.writeObject(serializableObject);
  13. ***********************************************

反序列化:
//对象的读取也就一模一杨了
//创建一个流对象,比如文件输入流对象
FileInputStream in = new FileInputStream( “C:\temp\test” );
//用刚才的文件流,创建一个对象序列化输入流
ObjectInputStream deserializer = new ObjectInputStream(in);
//使用该流的输入函数,将文件中保存的对象读取到内存中,并创建相应对象。
Object deserializedObject = deserializer.readObject( );
但是并不是所有的类都需要进行序列化,还是看自己的实际情况,如果类中没有需要存储的对象,就不必进行对象那个系列化,那么就不得说下序列化的版本号了

  1. serialVersionUID
  2. 字​面​意​思​上​是​序​列​化​的​版​本​号​,凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量
  3. 如果继承了序列化类,却没有序列化版本号,还有警告,仅仅是警告,但是当你添加了一个属性,就不是这样了,每个序列化都会有对应的算法,所以你改变了类的属性或者方法,相当于人的基因改变了。
  4. 这样:只要这个文件 多一个空格,得到的UID就会截然不同的,可以保证在这么多类中,这个编号是唯一的。所以,添加了一个字段后,由于没有显指定 serialVersionUID,编译器又为我们生成了一个UID,当然和前面保存在文件中的那个不会一样了,于是就出现了2个序列化版本号不一致的错误。因此,只要我们自己指定了serialVersionUID,就可以在序列化后,去添加一个字段,或者方法,而不会影响到后期的还原,还原后的对象照样可以使用,而且还多了方法或者属性可以用。

发表评论

表情:
评论列表 (有 0 条评论,468人围观)

还没有评论,来说两句吧...

相关阅读

    相关 序列序列

    序列化和反序列化   摘要   序列化和反序列化几乎是工程师们每天都要面对的事情,但是要精确掌握这两个概念并不容易:一方面,它们往往作为框架的一部分出现而湮没

    相关 序列序列

    个人学习理解 (只是自己默写序列化和反序列的代码以及几个问题) 1.序列化 和 反序列化 1.1 什么是序列化 和 反序列化 或者 你如何理解序列化和

    相关 序列序列

    序列化: 对象的序列化主要有两种用途:   1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;   2) 在网络上传送对象的字节序列。   

    相关 Java序列序列

    目录 1:什么是序列化、反序列化? 2:序列化的用途? 3:序列化的n种方式 1:什么是序列化、反序列化? 把对象转换为字节序列的过程称为对象的序列化