java序列化知识整理
1. 什么是序列化?
序列化就是只把一个对象串行化成一个字节流,用于网络传输或者持久化。
2. 序列化的使用场景?
a). 把内存中的对象持久化到文件或者数据库中;
b). 对象在网络上传输。
3. 序列化的实现?
1). 实现Serializable接口:
此方法简单,没有任何需要实现的方法。
笔者从业(web开发)两年一直使用该方法,本文以下主要讲解此方法。
2). 实现Externalizable 接口: Externalizable 是Serializable的子接口
此方法需要实现的方法,可以自己控制序列化的属性。
4. Serializable序列化的使用注意点
1. 序列化ID必须一致。
虚拟机允许反序列化有三个条件:类路劲一致,功能代码一致,两个类的序列化ID一致;
2. 对象A中引用对象B,A实现了序列化,则B也会被序列化;
3. 父对象实现序列化,则子对象也会被序列化
4. 子类对象被序列化,则父类对象不会被序列化,反序列化时调用默认的无参构造函数构造对象;
5. 序列化的对象中有属性前有transient修饰符时,该属性不会被序列化,因为该transient属性是临时的;
6. 序列化的对象中有属性前有static修饰符时,该属性不会被序列化,因为static代表次属性是类属性不是对象属性;
7. 序列化的对象中有属性属于敏感字段,需要加密传输,则需要自定义序列化和反序列化。需要注意的是,即使对象的属性是private也是不安全的,只有人工进行安全处理。
自定义方法:在序列化的类中自定义writeObject() 和 readObject()方法,虚拟机会试图调用对象类里的 writeObject 和 readObject 方法,进行用户自定义的序列化和反序列化,
如果没有这样的方法,则默认调用是 ObjectOutputStream 的 defaultWriteObject 方法以及 ObjectInputStream 的 defaultReadObject 方法。
6. 序列化存储规则:当写入文件的为同一对象时,并不会再将对象的内容进行存储,而只是再次存储一份引用,文件大小不会翻倍,只是略有增加(新增引用的控制信息)。
java序列化知识整理的更多相关文章
- 2019-9-16 java上课知识整理总结(动手动脑,课后实验)
java上课知识整理总结(动手动脑,课后实验) 一,课堂测试 1,题目:课堂测试:像二柱子那样,花二十分钟写一个能自动生成30道小学四则运算题目的 “软件” 要求:(1)题目避免重复: (2)可定制( ...
- Java并发知识整理
整理了一下前段时间学习Java并发的笔记,大约有40篇. 1. Java并发基础知识 并发基础(一) 线程介绍 并发基础(二) Thread类的API总结 并发基础(三) java线程优先级 并发基础 ...
- java基础知识整理
java基础入门知识(转载请注明出处.) 1.JVM.JRE和JDK的区别. (1)JVM(Java Virtual Machine):java虚拟机,用于保证java跨平台的特性,java语言是跨平 ...
- JAVA hashmap知识整理
HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题.HashMap的工作原理.ArrayList与Vect ...
- java 集合知识整理
java集合类图 HashMap和Hashtable的区别 HashMap HashTable 继承方式 extends AbstractMap implements Map extends D ...
- java基础知识整理:
一, Java中的继承: 1. final关键字(最终的,不可修改的不可变化的,可以修饰类,方法,变量等): 如果final修饰类的话,这个类不可以被继承: 如果修饰方法的话,这个方法不可以被子类覆盖 ...
- Java基础知识整理(一)
Java开发环境JDK(Java编辑器.Java运行工具(JRE作用).Java文档生成工具.Java打包工具) 1.Java是严格区分大小写的.2.Java程序中一句连续的字符串不能分开在两行书写, ...
- Java多线程知识整理
多线程 1. 多线程基础 多线程状态转换图 普通方法介绍 yeild yeild,线程让步.是当前线程执行完后所有线程又统一回到同一起跑线.让自己或者其他线程运行,并不是单纯的让给其他线程. join ...
- Java异常知识整理_处理异常时的性能开销
1.首先列两个从别的地方看到的说法: try-catch代码段会产生额外的性能开销,或者换个角度说,它往往会影响JVM对代码进行优化,所以建议仅捕获有必要的代码段,尽量不要一个大的try包住整段的代码 ...
随机推荐
- z-index 可以使用负值,CSS相对定位、绝对定位利器
很多技巧都是在工作中测试出来的,我搞DIV+CSS前端开发,现在是安卓收藏家,日常也有很多技巧,刚刚突然发现的这个技巧,真的很实用:Z-index值可以使用负值. z-index是个很强大的属性,是个 ...
- 【转】Java反射 之 反射基础
一.反射 反射:Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...
- SQL Server中cursor的使用步骤
参考文章: http://www.cnblogs.com/knowledgesea/p/3699851.html http://www.cnblogs.com/moss_tan_jun/archive ...
- JS刷新父窗口的几种方式
浮层内嵌iframe及frame集合窗口,刷新父页面的多种方法 <script language=JavaScript> parent.location.reload(); ...
- VS2010里, using System.Data.OracleClient; 不可用
当我试图去引用System.Data.OracleClient 这个命名空间时,VS 显示不存在 但是在对象浏览器里却可以找到这个命名空间及里边的对象 另外好像也没有区分清楚 using 和Refer ...
- 计算机开放电子书汇总(包括二十多本python相关的图书教程)
计算机开放电子书汇总(包括二十多本python相关的图书教程) https://github.com/it-ebooks/it-ebooks-archive 这个汇总包含了各种计算机相关的开放图书和文 ...
- Integrating AngularJS with RequireJS
Integrating AngularJS with RequireJS When I first started developing with AngularJS keeping my contr ...
- php 画图片3
<?php // 中文验证码 // 1. 创建画布 $im = imagecreatetruecolor(200, 200); // 2. 创建背景色 // 2.1得到背景颜色 $bg_colo ...
- 关于最少VC号数目的猜想
[事先说明,实际的虚拟电路的实际物理链路可能同时具有多个VC号,但每段逻辑链路仅有一个VC号,一条完整虚拟路径由多个段组成] 问题描述: 在一个虚拟电路交换网络中,每个路由器的直连链路都有一个独一无二 ...
- pimpl idiom vs. bridge design pattern
http://stackoverflow.com/questions/2346163/pimpl-idiom-vs-bridge-design-pattern