Java开发:什么是序列化?
1系列化(Serialize)是干什么的?
这是IO存储中的一个概念。计算机中所有的内容都是0或者1的数字。这些数字按顺序排列,便可以表示计算机中的万事万物,当然Java的对象也不例外。在内存中,无论如何表示,对我们的操作都没有影响,所以我们不必关心。但是,当我们需要把对象存储到硬盘、数据库或其它相关介质时,我们就需要考虑这个表示格式或者转化方法。
Java的对象要如何转化为这0、1的序列呢?就是靠序列化,使用java.io.ObjectOutputStream类即可完成复杂的转化工作,但ObjectOutputStream类可以支持的只有实现了Serializable接口的对象,如果没有实现Serializable接口,则会抛出NotSerializableException。你希望序列化的类中,常常可能参杂了一些临时性成员变量或者一些你并不希望它们被存储下来的属性,这些成员变量或者属性,就需要用transient关键字修饰。它们会在序列化时被忽略。当从存储介质中读取并还原成对象时,他们会被还原为属性的默认值(基本类型为0或false,对象为null)
序列化简单来说就保存对象在内存中的状态也可以说是实例化变量。这是Java提供的用来保存 Object state,一种保存对象状态的机制。只有实现了serializable接口的类的对象才能被实例化。
2什么情况下会用到序列化?
1当你想把内存中的对象写入到硬盘时
2当你想用套接字在网络上传输对象时
3当你想通过RMI调用对象时
(RMI是什么东西?):RMI总结来说就是远程调用对象,在一个jvm上调用另一个jvm的对象。
3序列化需要注意的事项
1序列化只保存对象的状态,而不管对象的方法。
2当一个父类实现了序列化,它的子类也自动实现序列化,不用显示进行实现了。
3当一个实例对象引用其他对象,当序列化该对象时也把引用的对象进行了实例化。
个人总结:serializable接口就是Java提供用来进行高效率的异地共享实例对象的机制,实现这个接口即可。
4JavaBean为什么要实现java.io.Serializable接口实现序列化?
public interface Serializable {
}
客户端访问了某个能开启会话功能的资源, web服务器就会创建一个与该客户端对应的HttpSession对象,每个HttpSession对象都要站用一定的内存空间。如果在某一时间段内访问站点的用户很多,web服务器内存中就会积累大量的HttpSession对象,消耗大量的服务器内存,即使用户已经离开或者关闭了浏览器,web服务器仍要保留与之对应的HttpSession对象,在他们超时之前,一直占用web服务器内存资源。
web服务器通常将那些暂时不活动但未超时的HttpSession对象转移到文件系统或数据库中保存,服务器要使用他们时再将他们从文件系统或数据库中装载入内存,这种技术称为Session的持久化。
将HttpSession对象保存到文件系统或数据库中,需要采用序列化的方式将HttpSession对象中的每个属性对象保存到文件系统或数据库中;将HttpSession对象从文件系统或数据库中装载如内存时,需要采用反序列化的方式,恢复HttpSession对象中的每个属性对象。所以存储在HttpSession对象中的每个属性对象必须实现Serializable接口。当然如果不是存储在session中的JavaBean可以不用存储哈。
好处:
a)比如说你的内存不够用了,那计算机就要将内存里面的一部分对象暂时的保存到硬盘中,等到要用的时候再读入到内存中,硬盘的那部分存储空间就是所谓的虚拟内存。在比如过你要将某个特定的对象保存到文件中,我隔几天在把它拿出来用,那么这时候就要实现Serializable接口;
b)在进行java的Socket编程的时候,你有时候可能要传输某一类的对象,那么也就要实现Serializable接口;最常见的你传输一个字符串,它是JDK里面的类,也实现了Serializable接口,所以可以在网络上传输。
c)如果要通过远程的方法调用(RMI)去调用一个远程对象的方法,如在计算机A中调用另一台计算机B的对象的方法,那么你需要通过JNDI服务获取计算机B目标对象的引用,将对象从B传送到A,就需要实现序列化接口。
Java开发:什么是序列化?相关推荐
- 阿里巴巴 Java 开发手册之编程规约(一)-------我的经验
阿里巴巴 Java 开发手册 一.编程规约 (一) 命名规约 1.[强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.(代码规范,易读) 反例: _name / __na ...
- 面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序
面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序 Ajax 为更好的 Web 应用程序铺平了道路 在 Web 应用程序开发中,页面重载循环是最大的一个使用障碍,对于 Java™ ...
- java object转list_这份Java开发规范,让你100%受益!
今天跟大家分享下Java开发规范的知识. 基于阿里巴巴JAVA开发规范整理: https://github.com/alibaba/p3c 1 命名风格 [强制]类名使用 UpperCamelCase ...
- 《阿里巴巴 Java 开发手册》读书笔记
偶然看到阿里巴巴居然出书了???趁着满减活动(节约节约....)我赶紧买来准备看看,刚拿到的时候掂量了好多下,总觉得商家给我少发了一本书,结果打开才知道..原来这本书这么小.... 编码规范的重要性 ...
- 白话阿里巴巴Java开发手册(编程规约)
本文欢迎转载,转载请注明原文链接,并附作者个人信息李艳鹏. 研发流程管理 最近,阿里巴巴发布了<阿里巴巴Java开发手册>,总结了阿里人多年一线实战中积累的研发流程规范,这些流程规范在一定 ...
- 还在重复造轮子?Java开发人员必知必会的20种常用类库和API
介绍 一个有经验的Java开发人员特征之一就是善于使用已有的轮子来造车.<Effective Java>的作者Joshua Bloch曾经说过:"建议使用现有的API来开发,而不 ...
- 北上广Java开发月薪20K往上,该如何做,需要会写什么
有人回答说这只能是大企业或者互联网企业工程师才能拿到.也许是的,小公司或者非互联网企业拿两万的不太可能是码农了,应该已经转管理.还有区域问题,这个不在我的考虑范围内,因为除了北上广深杭,其他地方也很难 ...
- 19位整数 java_为什么阿里巴巴Java开发手册中强制要求超大整数禁止使用Long类型返回?...
在阅读<阿里巴巴Java开发手册>时,发现有一条关于前后端超大整数返回的规约,具体内容如下: 这个问题在之前和前端联调的时候发生过,发现根据脚本 id 去审批的时候,状态没有变化,后来和前 ...
- 常识之外的规范——阿里java开发手册笔记(全章节)
说明 这篇文章是我第一次(认真)阅读<阿里巴巴 Java 开发手册(终极版)>的笔记.手册本身对规范的讲解已经非常详细了,如果你已经有一定的开发经验并且有良好的编码习惯和意识,会发现大部分 ...
- Java之什么是序列化以及为什么要序列化
http://blog.csdn.net/tlycherry/article/details/8986720 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,将数据分解成字 ...
最新文章
- jpa mysql乐观锁_JPA @Lock(value = LockModeType.PESSIMISTIC_WRITE) 悲观锁防坑
- 计算机科学学什么语言,在计算机科学中,什么不是正式语言? [关闭]
- 东莞.NET俱乐部线下技术沙龙-活动报名
- php如何检测键盘按键,js键盘事件,判断按下的是哪个键
- html计时器组件,vue 计时器组件的实现代码
- Android CoordinatorLayout
- matlab影像阿伯斯投影,D3.js 世界地图(一)投影方式
- me909嵌入式linux,树莓派驱动ME909s-821
- 音频编码之aac编码原理
- oracle imp exclound,Ce este o bază de date cloud | Oracle România
- 一线城市 or 二线城市
- Win11 PS2022 打开文件闪退
- cocos2dx使用了第三方库照样移植android平台-解决iconv库的移植问题
- 从业编程生涯十年,你要了解的程序员养生之道,以及进阶之路。
- 俞敏洪励志经典名言,读吧,会给你人生启发的
- 【学习笔记】Golang之Gorm学习笔记
- (转)Mysql的游标究竟怎么用--映日荷花别样红
- csv和 文件流(二进制)excel文件转化为blob
- JVM原理之详解现代垃圾回收器 Shenandoah 和 ZGC
- vue弹出层效果(vux)
热门文章
- 如何转换指定 波长 到 RGB 颜色?
- 滴水穿石-05数组排序
- 解决springmvc在单纯返回一个字符串对象时所出现的乱码情况(极速版)
- scala的传名参数
- c# 多线程中lock用法的经典实例
- .NET不用代码生成器自己写一个生成Code的DLL 自动动态生成三层架构(一)概况...
- wind up和end up的区别
- Python安装错误 building 'statsmodels. extensionerror: Microsoft Visual C++ 14.0 is
- 6、VTK基本数据结构
- Android app集成Google Map方法