序列化是一种用来处理对象流的机制

所谓对象流:

就是将对象的内容进行流化,可以对流化后的对象进行读写操作,也可以将流化后的对象传输于网络之间。

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

序列化的实现:

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

什么时候使用序列化:

1、对象序列化可以实现分布式对象

主要应用例如RMI(即远程调用Remote Method Invocation)要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样

2、java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据

可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递,利用对象序列化可以进行对象的“深复制”,即复制对象本身及引用的对象本身,序列化一个对象可能得到整个对象序列

3、序列化可以将内存中的类写入文件或数据库中

比如:将某个类序列化后存为问价,下次读取时只需将文件中的数据反序列化就可以将原先的类还原到内存中,也可以将类序列化为流数据进行传输,总的来说就是将一个已经实例化的类转成文件存储,下次需要实例化的时候只要反序列化即可将类实例化到内存中,并保留序列化时类中的所有变量和状态

4、对象、文件、数据有许多不同的格式,很难统一传输和保存

序列化以后就都是字节流了,无论是什么东西,都能变成一样的东西,就可以进行通用的格式传输或保存,传输结束以后,要再次使用,就进行反序列化还原,这样对象还是对象,文件还是文件

因为java中要将对象序列化为流的形式进行传输

对象的序列化就是为了数据传输,在你的代码的里是对象格式,而在传输的时候不可能还保持这对象的样子。

当两个进程再进行远程通信时,彼此可以发送各种类型的数据,无论是何种类型的数据都会以二进制序列的形式在网络上传输,发送方需要将这个java对象转换为字节序列才能在网络上传送,接收方则需要把字节序列再恢复为java对象

1、概念

序列化:把java对象转换为字节序列的过程

反序列化:把字节序列恢复为java对象的过程

2、用途:

a、把对象的字节序列永久的保存到硬盘上,通常放在一个文件中

b、在网络上传输对象的字节序列

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

所以涉及到数据传输或者存储的类,严格意义上来说都要加上序列化ID,这也是一种良好的编程习惯

java对象为什么要实现序列化相关推荐

  1. Java与iOS对话:Java对象与Apple plist序列化

    我很高兴地宣布我的第一个开源项目java-plist-serializer可以帮助您将Java(尤其是基于Spring的应用程序)与iOS应用程序集成.   背景 我正在将Java Webapp作为后 ...

  2. ios plist 国际化_Java与iOS对话:Java对象与Apple plist序列化

    ios plist 国际化 我很高兴地宣布我的第一个开源项目java-plist-serializer可以帮助您将Java(尤其是基于Spring的应用程序)与iOS应用程序集成在一起.   背景 我 ...

  3. java对象流保存表格,序列化表格 (Java 2 Platform SE 5.0)

    此字段有两种可能的解释: startMode == DOW_IN_MONTH startDay 指示夏令时是在 startMonth 月份中的哪个日期开始的,该日期可以是从 1 到 28.30 或 3 ...

  4. java clone 序列化_关于Java对象深度Clone以及序列化与反序列化的使用

    ‍        我们可以利用clone方法来实现对象只见的复制,但对于比较复杂的对象(比如对象中包含其他对象,其他对象又包含别的对象.....)这样我们必须进行层层深度clone,每个对象需要实现 ...

  5. Java对象的serialVersionUID在序列化和反序列化的用途

    本博客主要转自如下链接 http://blog.csdn.net/javazejian/article/details/52665164 这篇文章写的不错,但是有些地方我估计博主没有亲自测试,所以有些 ...

  6. Redis开发:hash存储自定义Java对象及value的序列化器设置

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

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

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

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

  9. Xson:Java对象序列化和反序列化工具

    1. Xson 介绍  Xson是一个Java对象序列化和反序列化程序.支持Java对象到字节数组的序列化,和从字节数组到Java对象的反序列化.  地址:https://github.com/xso ...

  10. JAVA进阶教学之(序列化和反序列化)

    目录 1.序列化Serialize和反序列化的概念 2.序列化和反序列化的代码演示: 3.序列化多个对象(序列化集合) 4.transient关键字将部分属性不参与序列化 1.序列化Serialize ...

最新文章

  1. 三维重建学习(3):张正友相机标定推导
  2. ABAP表抛FTP通用程序
  3. java中使用Semaphore构建阻塞对象池
  4. oracle 定时清理表数据,关于Oracle存储过程和调度器实现自动对数据库过期数据清除的问题...
  5. C11标准委员会成员解读C语言新标准
  6. 收藏 | 循环神经网络 RNN 详细图解!
  7. 帮内推 | 免费送50个推荐算法工程师的高薪offer!
  8. asp.net mvc cms项目Oxite
  9. Oracle 常用SQL语句大全(精)
  10. mtk无线网卡 linux,在树莓派上使用基于MT7601的无线网卡(如360/百度/腾讯Wifi)
  11. django 一个项目多个App项目搭建
  12. java怎么停止工作_Java停止工作怎么办
  13. angular--安全导航操作符 ( ?. )、非空断言操作符(!) (实用)
  14. BusyBox v1.22.1 (Ubuntu 1:1.22.0-15ubuntu1) built-in shell (ash) 开机黑屏
  15. R语言 第三方软件包的下载及安装
  16. Android中集成支付宝
  17. JS(ES5) 实现数组方法(迭代类型:evey、some、map、filter)的重构
  18. 天津不错的外资企业_天津外企名录大全
  19. Gos ——BIOS与继承者MBR
  20. 国家发布电子病历共享文档规范

热门文章

  1. Parallels将Win10引入Apple Silicon,实测运行效果糟糕
  2. WT2003H语音芯片(模组)是如何让雾化加湿助眠器方案 设计简单化、标准化?
  3. eclipse 启动失败,出现hs_err_pid972.log类文件,文件中含JavaThread Bundle File Closer daemon类内容
  4. 在计算机中360云盘如何删除文件,如何在360云盘中检索已删除的文件
  5. 传统推荐模型——协同过滤
  6. 计算机用户密码怎么查看,电脑密码如何查看? 电脑教程:查看方法
  7. table中tr:hover无效 td:hover有效
  8. 语音特征提取(语谱图Spectrogram,Fbank, MFCC, 及其delta-一阶差分)——python代码
  9. python安装失败0x80070005_win10下载安装软件时提示“0x80070005-拒绝访问”
  10. 计算机组策略主要功能,组策略的作用和功能