java 反序列化 怎么知道类_理解java中的序列化与反序列化
涉及的JDK API:
ObjectOutputStream() writeObject(obj)序列化
ObjectInputStream() readObject()反序列化
默认的序列化方式:实现Serializable接口
序列化:
定义:将对象及其信息转换为可存储或者传输形式的过程。
常见形式:序列化为文件,序列化为字节流等
作用:易于网络上传输或者存储到硬盘
代码示例:
@org.junit.Test
public void test5(){
ObjectOutputStream stream=null;
try {//序列化到d:/a.obj
stream = new ObjectOutputStream(new FileOutputStream("d:/a.obj"));
Per per = new Per();
stream.writeObject(per);
stream.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}
反序列化:
定义:将其他信息还原为java对象的过程。
代码示例:
@org.junit.Test
public void test6(){
ObjectInputStream ins=null;
try {//反序列化
ins=new ObjectInputStream(new FileInputStream("d:/a.obj"));
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
try {
Per p=(Per)ins.readObject();
System.out.println(p);
} catch (IOException e) {
} catch (ClassNotFoundException e) {
}
}
注意:
只有实现了Serializable接口或者Externalizable接口的类的对象才会被序列化。
静态的变量不会被序列化:因为静态变量属于类级别的。可能有时候实验会发现似乎也被序列化了,那是个假象,因为有可能是把序列化的过程和反序列化的过程写在了一个方法里,那么那个具有静态变量的类还是加载了的,所以。。
使用transient修饰的变量不会被序列化。
默认的反序列化不会调用任何的构造方法。
控制序列化与反序列化,可以再类中写
private void writeObject(java.io.ObjectOutputStream out) throws IOException;
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException;
作用是:比如序列化是有些内容较敏感,可以再writeObject中进行处理。。。。
完全由类来控制序列化与反序列化:实现Externalizable接口
void writeExternal(ObjectOutput out) throws IOException
void readExternal(ObjectInput in) throws IOException , ClassNotFoundException
注意:此中方式反序列化时,会先调用类的不带参数的构造方法,如果没有了或者级别不正确,则会报错。
可序列化类的不同版本的序列化兼容性问题:
显示的定义serialVersionUID,带来的好处:
1) 在某些场合,希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有相同的serialVersionUID;
2)在某些场合,不希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有不同的serialVersionUID。
http://www.2cto.com/kf/201312/264301.html
java 反序列化 怎么知道类_理解java中的序列化与反序列化相关推荐
- 为啥JAVA虚拟机不开发系统_理解Java虚拟机体系结构
1 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么.正是得益于Jav ...
- JAVA设计一个电视机类_漫谈Java程序设计中的接口应用
Java语言提供了一种接口(interface)机制.这种接口机制使Java的面向对象编程变得更加灵活.我们可以用接口来定义一个类的表现形式,但接口不能包含任何实现.在<Thinking in ...
- java设计一个user类_关于JAVA设计一个用户类
关于JAVA设计一个用户类 关注:152 答案:2 mip版 解决时间 2021-02-02 05:51 提问者安分守己的小青春 2021-02-02 02:23 设计一个用户类,该类有用户编号. ...
- Java正则表达式校验工具类_【Java工具类】----正则表达式校验工具类
/** * @Title: RegexValidateUtil.java * @Package org.csun.nc.util * @Description: TODO * @author chis ...
- java订单编号工具类_[idmiss-common] Java 工具类之- 顺序订单号的生成
1.前言 这是我写的工具类之一:根据日期生成唯一顺序订单号. 用Java 配合 Redis 实现包含日期的顺序订单号的生成, 效率可以达到 2500+/s 1000W+/h 个 . 2.基本介绍 框架 ...
- java刘备猜拳游戏类_基于java实现人机猜拳游戏
本文实例为大家分享了java实现人机猜拳游戏的具体代码,供大家参考,具体内容如下 完成人机猜拳互动游戏的开发,用户通过控制台输入实现出拳,电脑通过程序中的随机数实现出拳,每一局结束后都要输出结果.当用 ...
- java 创建数组工具类_用Java创建数组工具类ArrayTool
起步阶段写的代码,欢迎大家批评指正! public class ArrayTool { /** The constructor of the class ArrayTool,which is empt ...
- python中的元类_理解python中的元类
一,理解类也是对象 在python中类同样也是一种对象,只要使用关键字class,Python解释器在执行的时候就会创建一个对象,这个对象(类)自身拥有创建对象(类实例)的能力,这就是为什么他是一个类 ...
- python中常用的序列化模块_Python中的序列化和反序列化
为什么要序列化 内存中的字典.列表.集合以及各种对象,如何保存到一个文件中. 设计一套协议,按照某种规则,把内存中的数据保存到文件中,文件是一个个字节序列.所以必须把数据额转换为字节序列,输出到文件, ...
- fileinputstream自定义类序列化和反序列化_Rest Assured篇:Java中的序列化和反序列化...
点击上方蓝字设为星标 每天傍晚伴你一起成长! Java 中的序列化和反序列化是一个重要的编程概念.它适用于所有主要的编程语言.在本章中,我们将尝试在Java语言的上下文中理解此概念.在本章的最后,我们 ...
最新文章
- 百炼智百炼智能获5000万元Pre-A轮融资,深耕智能获客赛道
- Mycat实现读写分离
- pandas使用query函数和sample函数、使用query函数筛选dataframe中的特定数据行并使用sample函数获取指定个数的随机抽样数据
- 网络工程师技能图谱,这些你都会吗?
- es6 --- 自制迭代器
- 找单词(母函数问题)
- Vue笔记大融合总结
- Java中反射获取成员变量、构造方法、成员方法及类名
- 富人为什么赚钱这么容易
- Java 重写(Override)与重载(Overload)区别
- 15针VGA公头焊接示意图
- 如何使用Bootbox ?
- 代码比较工具——DiffMerge的安装教程
- 使用d3.js绘制曲线图
- 怎样预防电脑辐射脱发
- 最新安卓官方api文档完整版
- html+js将文本和图片保存(下载)到本地技术
- 机器的崛起:隐藏的控制论历史(二)
- 【pyqt5】实现选择文件界面
- 5.23 QQ音乐数据源(新)抓取完整步骤
热门文章
- 【裂缝识别】基于matlab GUI无人机裂缝图像处理系统(带面板)【含Matlab源码 1727期】
- 【静脉检测】基于matlab手指静脉图像检测【含Matlab源码 1654期】
- 【图像计数】基于matlab灰度二值化同类物体简单计数【含Matlab源码 759期】
- 【图像几何】基于matlab GUI图像几何运算系统【含Matlab源码 206期】
- SPSS 问卷与量表的区别及联系【SPSS 030期】
- php 判断是否在线,关于判断用户是否在线的问题!!!
- 计算机网络—3网络层(IP地址及分类、子网掩码及划分子网)
- 捡到iphone6怎么解锁_赛博朋克2077前期手枪用哪个好?2077节制结局及银杯节制解锁条件...
- matlab平滑图像轮廓,Matlab 画平滑轮廓 print 高质量 figure
- 安庆师范大学计算机学院书记,安庆师范大学计算机与信息学院导师教师师资介绍简介-施赵媛...