为什么JAVA对象需要实现序列化?


序列化是一种用来处理对象流的机制。
所谓对象流:就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。

序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:将需要被序列化的类实现Serializable接口(标记接口),该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象;接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。


  • 什么时候使用序列化呢?
    -对象序列化可以实现分布式对象。 主要应用例如:RMI(即远程调用Remote Method
    Invocation)要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样。
    -java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。
    可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。
    -序列化可以将内存中的类写入文件或数据库中。
    比如:将某个类序列化后存为文件,下次读取时只需将文件中的数据反序列化就可以将原先的类还原到内存中。也可以将类序列化为流数据进行传输。总的来说就是将一个已经实例化的类转成文件存储,下次需要实例化的时候只要反序列化即可将类实例化到内存中并保留序列化时类中的所有变量和状态。
    -对象、文件、数据,有许多不同的格式,很难统一传输和保存。
    序列化以后就都是字节流了,无论原来是什么东西,都能变成一样的东西,就可以进行通用的格式传输或保存,传输结束以后,要再次使用,就进行反序列化还原,这样对象还是对象,文件还是文件
    因为JAVA中要将对象序列化为 流的形式 进行传输

- 对象的序列化就是为了数据传输,在你的代码的里是对象格式,而在传输的时候不可能还保持这对象的样子。 当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。


概念
- 序列化:把Java对象转换为字节序列的过程。
- 反序列化:把字节序列恢复为Java对象的过程。
用途 对象的序列化主要有两种用途:
- 1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中。
- 2)在网络上传送对象的字节序列。


  • 所谓的Serializable,就是java提供的通用数据保存和读取的接口。至于从什么地方读出来和保存到哪里去都被隐藏在函数参数的背后了。这样子,任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。这样子极大的简化了类的设计。只要设计一个保存一个读取功能就能解决上面说得所有问题。
  • java的"对象序列化"能让你将一个实现了Serializable接口的对象转换成一组byte,这样日后要用这个对象时候,你就能把这些byte数据恢复出来,并据此重新构建那个对象了。
  • 工作流当中流程变量的几种数据类型:string、integer、short、long、double、boolean、date、binary、serializable,这就是为什么要将javabean实现序列化的原因,因为你将对象设置到流程变量中必须要实现序列化,否则会在设置流程变量的时候报错找不到该类型。
  • java对象序列化机制就是把内存中的Java对象(User之类的JavaBean)转换成二进制流。java对象序列化后可以很方便的存储或者在网络中传输。
    Java的序列化机制是通过运行时判断类的序列化ID(serialVersionUID)来判定版本的一致性。
  • 在反序列化时,java虚拟机会通过二进制流中的serialVersionUID与本地的对应的实体类进行比较,如果相同就认为是一致的,可以进行反序列化,正确获得信息,否则抛出序列化版本不一致的异常。
  • 所以涉及到数据传输或者存储的类,严格意义上来说都要加上序列化ID,这也是一种良好的编程习惯。

为什么JAVA对象需要实现序列化?相关推荐

  1. java 网络传输中发送byte[]和接收到的不一致_为什么JAVA对象需要实现序列化?

    序列化是一种用来处理对象流的机制.所谓对象流:就是将对象的内容进行流化.可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间.序列化是为了解决在对对象流进行读写操作时所引发的问题.序列化的 ...

  2. 代码即财富之我学Java对象序列化与反序列化(2)

    2019独角兽企业重金招聘Python工程师标准>>> 我们在程序创建的Java对象都是存在于JVM内存中的,也就是Java对象的生命周期一定不会长于JVM,所以如何以一种持久化的方 ...

  3. 你不知道的java对象序列化的秘密

    文章目录 简介 什么是序列化 重构序列化对象 序列化不是加密 使用真正的加密 使用代理 Serializable和Externalizable的区别 总结 简介 你知道序列化可以使用代理吗?你知道序列 ...

  4. java对象的序列化和反序列化详细解释

    java对象的序列化和反序列化是什么意思 1.序列化是干啥用的? 序列化的原本意图是希望对一个Java对象作一下"变换",变成字节序列,这样一来方便持久化存储到磁盘,避免程序运行结 ...

  5. 一文带你全面了解java对象的序列化和反序列化

    本文分享自华为云社区<java中什么是序列化和反序列化?>,原文作者:dayu_dls . 这篇文章主要给大家介绍了关于java中对象的序列化与反序列化的相关内容,文中通过详细示例代码介绍 ...

  6. redis java对象操作

    使用Jedis客户端 1. java 对象,需序列化 public class Person implements Serializable {private int id;private Strin ...

  7. 像apro一样轻松地将复杂的Java对象与json相互转换

    杰克逊对象映射器(Jackson Object Mapper) Introducing, the black magic that is the objectMapper. This library ...

  8. Java对象序列化详解6,Java对象的序列化与反序列化详解

    把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种途径: Ⅰ . 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中 Ⅱ.  在网 ...

  9. 用 XStream 序列化/反序列化 XML 为 Java 对象(实例)

    用 XStream 序列化/反序列化 XML 为 Java 对象(实例) Posted on 2007-06-05 19:06 Stephen Wong 阅读(1224) 评论(0)  编辑 收藏 网 ...

  10. Java对象XML序列化框架-Simple2.0

    Java对象XML序列化框架-Simple2.0 Simple是一个XML序列化框架,一个Java 版本宽容的序列化框架,能够快速在Java 平台上开发XML.支持通过annotations完全配置化 ...

最新文章

  1. liunx 下su 和sudo 的区别
  2. unix环境高级编程——文件i/o
  3. 【AI-1000问】机器学习和模式识别是什么关系?
  4. best introduction to camera calibration
  5. php大并发 大流量 大存储解决方案
  6. 过分了,这样阅读Datasheet(数据手册)合适吗?
  7. 记一次简单的vue组件单元测试
  8. PHP两个匿名函数传递性,PHP让人不知道的匿名函数的几种写法(附代码)
  9. 3. Javascript 对象
  10. 朱石景 201671010457 团队项目评审课程学习总结
  11. 网关串口+EM310
  12. 好用的在线HTTP接口测试 - HTTP GET/POST模拟请求测试工具-ApiPost
  13. ReportMachine终于有更新了。
  14. Android 打包AAB+PAD(Unity篇)
  15. 使用WebPack构建UMD库兼容性原理浅谈
  16. 【C++】分数加减法
  17. C#学习 - 关于Single()
  18. raid 物理盘缓存状态_查看RAID状态
  19. 12、字符(串)输入、输出
  20. 成都金堂计算机学校有哪些?

热门文章

  1. 协调才暴力-精英乒乓论坛
  2. 共模信号与差模信号(差分信号)
  3. E.03.24 Colin Huang steps down as Pinduoduo chair
  4. 中文文案排版 - 中文排版教程
  5. 基于Scala开发的spark临界点均值法填充缺失值的job
  6. 点对点网络带宽测试软件,iperf点对点网络性能测试工具
  7. centos7安裝搜狗輸入法_centos7安装搜狗输入法
  8. 坐标计算机在线,公路坐标计算系统免费版
  9. 【干货】github上十二款最著名的Android播放器开源项目
  10. 深蓝词库转换1.9发布——支持英库拼音、搜狗bin格式、FIT、中州韵等