为什么java需要序列化对象
- 序列化是一种用来处理对象流的机制
- 所谓对象流:就是将对象的内容进行流化,可以对流化后的对象进行读写操作,也可将流化后的对象传输与网络之间
- 序列化是为了解决在对象流进行读写操作时所引发的问题
- 序列化的实现:将需要被序列化的类实现Serializable接口(标记接口) ,该接口没有需要被实现的方法,implement Serializable 只是为了标注该对象是可被序列化的,而后使用一个输出流(如 FileOutPutStream)来构造出一个ObjectOutPutStream对象,接着,是用writerObject方法就可以参数为Obj的对象写出(即保存其状态),要是恢复的要使用相应的输入流ObjectInputStream
什么时候使用序列化?
- 对象序列化可以实现分布式对象,
主要用于如RMI(远程调用 Remote method invocation) 用利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样
2.java对象序列化不仅保留一个对象数据,而且递归保存对象引用的每个对象的数据
可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递,利用对象序列化可以进行对象的深复制,即复制对象本身及引用的对象本身,序列化一个对象可能得到整个对象序列
3.序列化可以将内存中的类写入文件或者数据库
比如,将某个类序列化后保存为文件,下次读取时只需要将文件中的数据反序列化就可以将原来的类还远到内存中,也可以将类序列化为流进行传输,总的来说就是将一个已经实例的类转换为文件储存,下次需要实例化的时候只要反序列化既可以将实例化的内存中保留序列化时类中锁有变量和状态
序列化以后都是字节流了,无论他原来是什么东西,都能变成一样东西,就可以进行通用的格式传输或保存,传输结束以后,要再次使用,就进行反序列化,这样对象还是对象,文件还是文件
- 因为JAVA中要将对象序列化为流的形式进行传输
- 对象的序列化就是为了数据传输,在你的代码里是对象格式,而在传输的时候不可能还保持对象的样子
- 当两个进程在进行通信时,彼此可以发送各种类型的数据,无论是何种类型的数据,都会以二进制序列额形式在网络上传输,发送方需要把这个JAVA对象转换为字节序列化,才能在网络上传送,接收方则需要把字节序列在恢复成java对象
1.概念
序列化:吧Java对象转换为字节序列的过程反序列化:把字节序列恢复为java对象的过程
吧对象的字节序列永久保存在硬盘上,通常存放在一个文件中
在网络上传送对象的字节序列
- 所谓的Serializable,就是java提供的通用数据保存和读取的接口,至于从什么地方读出来和保存到哪里都被隐藏在函数参数的背后,这样子任何类型只要实现了Serializable接口,就可以保存到文件中,或者座位数据流的方式通过网络发送到别的地方,也可以用管道来传输到系统其它程序中,这样子极大简化类的设计,只要设计一个读取功能就能解决上面所说的问题
- java的对象序列化能让你将一个实现了Serializable接口的对象转换成一组byte,这样日后要用到这个对象时候,就能把这些byte数据恢复出来,并据此重新构建那个几个对象了
- 工作流中流程变量的几种类型:String Integer short long double boolean date binary serializable ,这就是什么将javabean实现序列化的原因了,因为你讲对象设置到流程变量中必须要实现序列化,否者报错找不到类型
- java对象序列化机制就是把内存中的java对象(User之类的javabean)转换成为二进制流,java对象序列化以后可以很方便的储存或者在网络中传输
- java的序列化机制是通过运行时判断类的序列化ID来判定版本是否一致
- 在反序列化是,java虚拟机会通过二进制流中serialVersionID与本地的对应的实体类进行比较,如果相同就认为一致的,可以进行反序列化,正确获得信息,否则抛出序列化版本不一致的异常
- 所以设计到数据传输或者储存类,严格意义上来说都要加上序列化ID,这也是一种良好的编程习惯.
为什么java需要序列化对象的更多相关文章
- Android使用HttpURLConnection通过POST方式发送java序列化对象
使用HttpURLConnection类不仅可以向WebService发送字符串,还可以发送序列化的java对象,实现Android手机和服务器之间的数据交互. Android端代码: public ...
- 【译】Java中的对象序列化
前言 好久没翻译simple java了,睡前来一篇. 译文链接: http://www.programcreek.com/2014/01/java-serialization/ 什么是对象序列化 在 ...
- java序列化对象 插入、查询、更新到数据库
java序列化对象 插入.查询.更新到数据库 : 实现代码例如以下: import java.io.ByteArrayInputStream; import java.io.ByteArrayOutp ...
- Java 序列化 对象序列化和反序列化
Java 序列化 对象序列化和反序列化 @author ixenos 对象序列化是什么 1.对象序列化就是把一个对象的状态转化成一个字节流. 我们可以把这样的字节流存储为一个文件,作为对这个对象的复制 ...
- Java IO(Properties/对象序列化/打印流/commons-io)
Java IO(Properties/对象序列化/打印流/commons-io) Properties Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载. ...
- Java I/O - 对象的输入输出与序列化
先说概念: 一.相关概念 序列化是Java提供的一种将对象写入到输出流.并在之后将其读回的机制. 序列化:把内存中的java对象转换成与平台无关的二进制字节序列,以便永久保存在磁盘上或通过网络进行传输 ...
- 序列化+fastjson和java各种数据对象相互转化
序列化的定义 序列化就是一种用来处理对象流的机制 所谓对象流也就是将对象的内容进行流化.可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间. 序列化是将对象转换为容易传输的格式的过程 例 ...
- Java 序列化对象工具类
SerializationUtils.java package javax.utils; import java.io.ByteArrayInputStream; import java.io.Byt ...
- Java基础之对象序列化
1. 什么是Java对象序列化 Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长.但在现 ...
随机推荐
- HI-LO计数法,赌桌,与机会
HI-LO计数法,赌桌,与机会 “人只是在拼一种可能性”. 很多简单道理往往字面上理解容易,可实际运用难极. 一,那些人生中被扯的蛋 而关于人生的指导,好多耳熟能详的老话最终都被发现是蒙傻逼的.随便说 ...
- javascript实现快排
<script> var a = [7,4,5,3,2,1,4,5,6,6,2,21,4,53,12,0,-5,31,535,64,11,1,1,1,1]; function swap(a ...
- Spring 开发第一步(二)
今天继续学习<Spring in action 3rd>并运行书中的例子,到了第4章aop,是加入一个作为切面的Audience类,将Performer的perform()方法作为切点来进 ...
- OpenStack 虚机网卡的创建过程
原文链接:https://www.cnblogs.com/potato-chip/p/9127083.html OpenStack虚机网卡的创建过程 OpenStack最基本和常用的操作就是启动虚机. ...
- 程序媛计划——mysql修改表结构
#查看表的结构 mysql> desc score; +------------+--------------+------+-----+---------+----------------+ ...
- bzoj4519: [Cqoi2016]不同的最小割(最小割树)
传送门 好神仙……最小割树是个什么东西…… 其实我觉得干脆直接$O(n^2)$跑几个dinic算了…… 来说一下这个叫最小割树的神奇东西 我们先建一个$n$个点,没有边的无向图 在原图中任选两点$s, ...
- day57作业(包含data内容)
day57作业 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset=&quo ...
- 【JS深入学习】——事件代理/事件委托
事件代理/事件委托(event delegation) 需求一:当一个div内部有多个事件发生,给每个元素逐个添加事件十分麻烦... 需求二:在项目中我们常常需要动态的添加元素,不可避免的需要为那些未 ...
- Android之自定义控件
开发自定义控件的步骤: 1.了解View的工作原理 2. 编写继承自View的子类 3. 为自定义View类增加属性 4. 绘制控件 5. 响应用户消息 6 .自定义回调函数 一.Vie ...
- cobbler koan自动重装系统
介绍 koan是kickstart-over-a-network的缩写,它是cobbler的客户端帮助程序,koan允许你通过网络提供虚拟机,也允许你重装已经存在的客户端.当运行时,koan会从远端的 ...