序列化是一种用来处理对象流的机制。所谓对象流:就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口(标记接口),该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象;接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。什么时候使用序列化呢?一:对象序列化可以实现分布式对象。
主要应用例如:RMI(即远程调用Remote Method Invocation)要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样。二:java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。
可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。三:序列化可以将内存中的类写入文件或数据库中。
比如:将某个类序列化后存为文件,下次读取时只需将文件中的数据反序列化就可以将原先的类还原到内存中。也可以将类序列化为流数据进行传输。总的来说就是将一个已经实例化的类转成文件存储,下次需要实例化的时候只要反序列化即可将类实例化到内存中并保留序列化时类中的所有变量和状态。四: 对象、文件、数据,有许多不同的格式,很难统一传输和保存。
序列化以后就都是字节流了,无论原来是什么东西,都能变成一样的东西,就可以进行通用的格式传输或保存,传输结束以后,要再次使用,就进行反序列化还原,这样对象还是对象,文件还是文件因为JAVA中要将对象序列化为 流的形式 进行传输。


  • 对象的序列化就是为了数据传输,在你的代码的里是对象格式,而在传输的时候不可能还保持这对象的样子。
  • 当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。
  • 1.概念序列化:把Java对象转换为字节序列的过程。反序列化:把字节序列恢复为Java对象的过程。
  • 2.用途 对象的序列化主要有两种用途: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,这也是一种良好的编程习惯。

小编是一个有着5年工作经验的程序员,关于Java,自己有做材料的整合,一个完整学习Java的路线,学习材料和工具。需要的伙伴可以私信我,发送“交流”后就可免费获取。对于学习Java有任何问题(学习方法,学习效率,如何就业)都可以问我。希望你也能凭自己的努力,成为下一个优秀的程序员!

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

  1. java面试题32:Java网络程序设计中,下列正确的描述是()

    java面试题32:Java网络程序设计中,下列正确的描述是() A:Java网络编程API建立在Socket基础之上 B:Java网络接口只支持tcP以及其上层协议 C:Java网络接口只支持UDP ...

  2. Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

    MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...

  3. 用java网络编程中的TCP方式上传文本文件及出现的小问题

    自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用. 首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文 ...

  4. 网络传输中的两个阶段、阻塞IO、非阻塞IO和多路复用

    今天学习了网络传输中的两个阶段.阻塞IO.非阻塞IO和多路复用 一.网络传输中的两个阶段 分别是 waitdata 和 copydata send就是copydata recv是waitdata和co ...

  5. 数据丢包怎么修复_一种网络传输中实时音频数据丢包恢复的方法与流程

    本发明涉及通信技术领域,具体涉及一种网络传输中实时音频数据丢包恢复的方法. 背景技术: 随着通信技术的发展,音频传输系统对实时性和准确性的要求越来越高.在网络的音频传输过程中,影响音频音质的主要因素是 ...

  6. 网络传输中的数据长度

    探究网络传输中不同层级的数据大小和数据格式 网络中不同层次的数据统称为PDU (协议数据单元 - protocol data unit) 每一层中可能有一种或多种协议,挑选最常见的协议进行说明 数据链 ...

  7. 网络传输中的那些编码之-URL编码

    由于URL编码的一些混乱情况,曾经困扰着无数的程序员,本文将捋一捋URL编码相关的一些知识点,希望看望之后能给人恍然大悟的感觉. 本文将从如下几个方面进行介绍: 什么是URL编码 为什么进行URL编码 ...

  8. 网络传输中的那些编码之-base64编码

    在前面一篇文章中,这里介绍了URL编码的一些知识点,本文将对网络中另外一个常见的编码方式base64编码进行介绍. 同样的,按照之前的介绍方式,本文将从如下几个方面进行介绍: 什么是base64编码 ...

  9. 网络传输中available的用法

    在处理文件输入流时,通过调用available()方法来获取还有多少字节可以读取,根据该数值创建固定大小的byte数组,从而读取输入流的信息. FileInputStream fi = new Fil ...

最新文章

  1. mysql replication 配置_MySQL Replication配置主从的教程
  2. Linux备份压缩命令
  3. yarn add webpack webpack-cli 报错
  4. 为什么要要使用MyBatis
  5. 当使用easyui时,jquery的设置disabled属性方法失效
  6. javascript中索引_如何在JavaScript中找到数字在数组中所属的索引
  7. 127.Word Ladder
  8. 三维点云学习(4)5-DBSCNA python 复现-1- 距离矩阵法
  9. 大数据可视化有哪些优势
  10. jenkins 编译java_Jenkins 通过 maven 构建编译 JAVA 项目环境
  11. caffe 安装方法(python)
  12. 乐高叉车wedo教案_乐高wedo20课程教案
  13. win10系统迁移后系统重装_Windows10系统迁移后无法更新
  14. ps盖印图层在哪里_PS如何盖印图层?PS盖印图层快捷键
  15. kettle复杂表头的Excel数据源处理
  16. 计算机图形学在游戏设计中的应用
  17. aoc显示器2k165hz测试
  18. 如何把照片压缩到20k一下_如何把2寸彩照压缩到20k以下?
  19. CSDN的文章如何快速转移到微信公众号上
  20. HDU 4416 Good Article Good sentence(后缀数组)

热门文章

  1. Quartz定时框架CronTrigger开发使用实例
  2. 根据Explain结果中的key_len判断MySQL联合索引中实际用到的索引字段
  3. 常用来进行钢结构节点输出的软件是什么_Revit中如何处理钢结构节点连接
  4. python正则表达式花括号_python正则表达式(+ {})(二)
  5. esxi6.7虚拟机网卡连接第二个虚拟交换机_Linux云计算底层技术之网络虚拟化
  6. java学习_都说Java难学,不知道具体的学习内容?全套Java学习路线送上
  7. 2.1 《数据库系统概论》关系数据结构及形式化定义(关系、关系模式、关系数据库)
  8. c轴 t轴 l轴_气涨轴-气胀轴
  9. QT系统性总结(推荐新手看)
  10. Qt / Qt5 事件(event)机制详解