Java中序列化的好处及意义

1、序列化是干什么的?简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States,
 但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。2、什么情况下需要序列化 当你想把的内存中的对象保存到一个文件中或者数据库中时候;当你想用序列化在网络上传送对象的时候;当你想通过RMI传输对象的时候;3、当对一个对象实现序列化时,究竟发生了什么?在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:
  
1 Foo myFoo = new Foo(); 
2 myFoo .setWidth(37); 
3 myFoo.setHeight(70); 
  当通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,70)都被保存到foo.ser文件中,这样以后又可以把它 
  从文件中读出来,重新在堆中创建原来的对象。
  保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对象。
1 FileOutputStream fs = new FileOutputStream("foo.ser"); 
2 ObjectOutputStream os = new ObjectOutputStream(fs); 
3 os.writeObject(myFoo); 
4、实现序列化(保存到一个文件)的步骤
Make a FileOutputStream 
1 FileOutputStream fs = new FileOutputStream("foo.ser"); 
2 
Make a ObjectOutputStream 
ObjectOutputStream os = new ObjectOutputStream(fs); 
write the object

 

write the object
os.writeObject(myObject1);
os.writeObject(myObject2);
os.writeObject(myObject3);
close the ObjectOutputStream java 代码 os.close();
5、举例说明
import java.io.*; public class Box implements Serializable {private int width;private int height; public void setWidth(int width){ this.width = width; } public void setHeight(int height){this.height = height; } public static void main(String[] args){ Box myBox = new Box();myBox.setWidth(50);myBox.setHeight(30);try{FileOutputStream fs = new FileOutputStream("foo.ser");     ObjectOutputStream os = new ObjectOutputStream(fs); os.writeObject(myBox); os.close(); }catch(Exception ex){ ex.printStackTrace(); } } 
}                       

  


6、相关注意事项
  a)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;
  b)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;
  c)并非所有的对象都可以序列化,,至于为什么不可以,有很多原因了
  比如:
    1.安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,
      比如写到文件,或者进行rmi传输 等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。
    2. 资源分配方面的原因,比如socket,thread类,如果可以序列化,进行传输或者保存,
      也无法对他们进行重新的资源分配,而且,也是没有必要这样实现
 
把一个对象完全转成字节序列,方便传输。
就像你寄一箱饼干,因为体积太大,就全压成粉末紧紧地一包寄出去,这就是序列化的作用。
只不过JAVA的序列化是可以完全还原的。

 

转载于:https://www.cnblogs.com/douzi520/p/9497889.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

​马斯克的全球上网计划:月费646元,网速可达200Mbps

SpaceX创始人兼首席执行官埃隆马斯克来源:腾讯科技审校作者:金鹿腾讯科技讯 4月16日消息,美国太空探索技术公司SpaceX在六个月前向公众推出了Starlink Early Access计划。在最初的几个月里,这项卫星互联网服务的用户增长到了1万多…

剑指 Offer 68 - II. (二叉树)二叉树的最近公共祖先

题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以…

从狼群智能到无人机群协同决策

来源:飞思实验室文:小翼生物群集行为是自然界存在的一种普遍现象 ,先前的研究已表明人们可以通过模仿鸟群、鱼群、蜂群等行为, 研究其群体性决策机制, 进而用于构建集群系统的决策系统框架. 狼群在认知、分工, 以及复杂环境适应性等方面具有突出的优势, …

解决问题 com.alibaba.fastjson.JSONObject cannot be cast to xxx

{"msg": "success","code": "success","data": [{"create_time": "2020-11-09 11:54:08","exec_status": "正常","host_id": 1527414,"id": 3136268,"ip…

CSS常用样式

边框 http://www.w3school.com.cn/cssref/pr_border.asp p {border:5px solid red; } 可以按顺序设置如下属性: border-width border-style border-colorobject.style.border"3px solid blue"边框阴影(CSS3 ) http://www.w3school.com.cn/cssref/pr_box-s…

华为自动驾驶实车实路测试视频曝光!

来源:量子位、物联网智库等自动驾驶的风又刮起来了,这次处在风暴中心的是华为。4月15日,消息称配备华为自动驾驶技术的北汽新能源极狐阿尔法S的HI版车型在上海进行了公开试乘,这也是华为自动驾驶技术公开试乘的全球首秀。就试乘效…

Leetcode--450. 删除二叉搜索树中的节点

给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先…

未来智能:人有人用,机有机用

来源: 苇草智酷作者:王飞跃当今最好的人工智能程序到底有多智能?它们是如何工作的?能做些什么?我们有必要担心机器比人类聪明且将很快夺取我们的工作吗?以上这些问题都颇受人们的关注,梅拉妮米歇…

Leetcode--329. 矩阵中的最长递增路径

给定一个整数矩阵,找出最长递增路径的长度。 对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。 示例 1: 输入: nums [ [9,9,…

排序及查找----[(冒泡,快速)(拉格朗日,二分)]

代码展示: 1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System.Text;5 using System.Threading.Tasks;6 7 namespace paixu8 {9 class Program10 {11 static void Main()12 {13 int[] Array { 1, 45…

因果作用推断、因果网络学习及其他

来源:久章智能 未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网(城市)云脑研究计划,构建互联网(城市)云脑技术和企业图谱…

学习《图解HTTP》有感

HTTP协议的出现主要是为了解决文本传输的难题(大家互相共享文件没有一个规范),最初的设计理念是:借助多文档之间的关联形成超文本,成为相互参阅的WWW(万维网) 计算机和网络设备要通信&#xff…

mysql解决select * from 表名 (where + 约束条件为空)

mysql解决select * from 表名 (where 约束条件为空),示例如下: SELECT * from tableName WHERE name is NULL; 从 tableName 表中查询 name 字段为空的记录。转载于:https://www.cnblogs.com/zrmw/p/9887655.html

通信人工智能的下一个十年(上)

来源:电信科学欧阳晔1, 王立磊1, 杨爱东1, 马利克萨哈2, 大卫贝兰格3,4, 高同庆5, 韦乐平6, 张亚勤71 亚信科技(中国)有限公司,北京 1001932 美国威瑞森电信公司,美国 纽约 100363 美国电话电报公司,美国 得…

[Swift]LeetCode19. 删除链表的倒数第N个节点 | Remove Nth Node From End of List

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址&a…

CAS

cas:Compare and Swap,即比较再交换。 对CAS的理解,CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B&…

大脑使用交叉存储,来区分现在和过去

来源:混沌巡洋舰在每一个清醒的时刻,人类和其他动物必须在我们对过去的记忆和对现在的意识两者中保持平衡。我们必须吸收关于周围世界的新的感官信息,同时保持对早期观察或事件的短期记忆。我们理解周围环境、学习、行动和思考的能力都依赖于…

CONTINUE...? ZOJ - 4033

CONTINUE...? ZOJ - 4033 题解:先计算一下总数sum是否是偶数,如果不是则不能分出来,如果是则从后面开始分,先把人分到1、3组,分完sum / 2这些人,如果恰好能够分成零,那么剩下前面的都分到2、4组…

对象在内存中的存储布局

对象头包含: markword(和锁相关的信息) 8字节 class pointer(说明对象属于哪个类),jvm指针八字节,但是默认压缩,所有4个字节 对象体包含: instance word实例数据(例如int,这就占四个字节,l…

用研究新范式破解生命科学难题

来源:中国科学报 作者:丛斌(中国工程院士)采访整理:张思玮(本报记者)当今,世界科技正处于重大变革前夕。各领域科学家们一直积极地探索物质本质、宇宙本源、生命本质,并迫…