Java序列化、反序列化
目录
1:什么是序列化、反序列化?
2:序列化的用途?
3:序列化的n种方式
1:什么是序列化、反序列化?
- 把对象转换为字节序列的过程称为对象的序列化
- 把字节序列转换为对象的过程中称为对象的反序列化
2:序列化的用途?
- 把对象的字节序列持久化到磁盘,通常会放到文件中;
- 在网络上传输对象的字节序列;
在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。
3:序列化的n种方式
3.1 Java的IO库
java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object obj)可以把参数obj对象序列化到当前输出流中。
java.io.ObjectInputStream代表对象输入流,它的readObject()方法从一个输入流中读取字节序列,并将其反序列化为对象返回。
只有实现了Serializable和Externalizable接口的类的对象才能被序列化。 Externalizable接口继承自 Serializable接口,实现Externalizable接口的类完全由自身来控制序列化的行为,而仅实现Serializable接口的类可以 采用默认的序列化方式 。
代码如下(Java bean统一为Person,后续不再单独列出):
class Person implements Serializable {/*** */private static final long serialVersionUID = 6191069895710625778L;private String name;private int age;private String sex;public Person(){}public Person(String name, int age, String sex) {this.name = name;this.age = age;this.sex = sex;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";}
}
public class Test {public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {Person man = new Person("obob",18,"M");System.out.println("原始对象:"+man);String filePath = "Person.txt";serialize(man, filePath);Person p = deSerialize(new File(filePath));System.out.println("反序列化后的对象:"+p);}public static void serialize(Person p, String filePath) throws FileNotFoundException, IOException {ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File(filePath)));oos.writeObject(p);System.out.println("序列化成功");oos.close();}public static Person deSerialize(File file) throws FileNotFoundException, IOException, ClassNotFoundException {ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));Person p = (Person) ois.readObject();System.out.println("反序列化成功");ois.close();return p;}}输出为:
原始对象:Person [name=obob, age=18, sex=M]
序列化成功
反序列化成功
反序列化后的对象:Person [name=obob, age=18, sex=M]
3.2 使用Json序列化工具
FastJson、ProtoBuf、Jackson等序列化工具都可以,以fastjson为例
Person man = new Person("obob",18,"M");//序列化String json = JSONObject.toJSONString(man);System.out.println(json);//反序列化System.out.println(JSONObject.parseObject(json, Person.class));
Java序列化、反序列化相关推荐
- java序列化 反序列化_Java序列化– Java序列化
java序列化 反序列化 Serialization in Java was introduced in JDK 1.1 and it is one of the important feature ...
- Java 序列化反序列化框架比较
文章目录 一.简介 二.序列化框架 1.JDK 2.XML序列化 3.JSON序列化 4.Hessian 5.Avro序列化 6.Kyro序列化 7.Protostuff 三.序列化框架对比测试 1. ...
- java序列化方式性能比较
来源:http://john521.iteye.com/blog/1099574 有一个很不错的工具http://github.com/eishay/jvm-serializers/ ,可以用它来评测 ...
- Java Hessian反序列化漏洞
漏洞简介 Hessian是一个轻量级的remoting onhttp工具,是一个轻量级的Java序列化/反序列化框架,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单 ...
- java序列化方案对比
1.引言 目前移动客户端应用程序上,需要将用户内容持久化到设备上,一般任何feed流应用,如微博.推特.新闻客户端等都需要将内容做持久化操作,以便在内存回收后,再次进入程序能迅速恢复之前的内容.另外如 ...
- [Java] 序列化(Serialization)的本质是什么?在Java中怎么实现?为什么要了解序列化技术?序列化技术选型要点是什么?
文章目录 前言 序列化是什么? 理解对象在内存中是如何存储的 数据在进程内存中的分布图 数据被序列化之后在内存中的分布图 序列化/反序列化的本质? 序列化在Java中的实现? 1. JDK Seria ...
- 用 XStream 序列化/反序列化 XML 为 Java 对象(实例)
用 XStream 序列化/反序列化 XML 为 Java 对象(实例) Posted on 2007-06-05 19:06 Stephen Wong 阅读(1224) 评论(0) 编辑 收藏 网 ...
- Java序列化的作用和反序列化
1.序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存object states,但 ...
- java list反序列化_java序列化与反序列化操作实例分析
本文实例分析了java序列化与反序列化操作.分享给大家供大家参考,具体如下: 概述: Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程. ...
- Java序列化和反序列化小记
序列化:将java对象转换为字节序列的过程叫做序列化 反序列化:将字节对象转换为java对象的过程叫做反序列化 通常情况下,序列化有两种用途: 1) 把对象的字节序列永久的保存在硬盘中 2)在网络上传 ...
最新文章
- Elasticsearch 为什么能做到快速检索?— 倒排索引的秘密
- 含有多个java程序的文件夹导入MyEclipes 出现错误的解决办法
- 行转列(FOR XML PATH)
- iView学习笔记(三):表格搜索,过滤及隐藏列操作
- 容器编排技术 -- Kubernetes kubectl patch 命令详解
- vs2010 代码混淆 代码加密
- rmmod无法卸载驱动_AMD芯片组驱动更新:优化了RYZEN CPU供电调节
- Oct 12: Patch Set Update Released
- win10电脑虚拟网络设置方法
- java severs_openssl简介-指令s_server
- 双系统启动修复完整解决方案
- IMPLEMENT_DYNAMIC
- linux 卸载windows系统服务,如何卸载windows系统
- python画人脸代码_10行代码实现python人脸识别
- 书单 | 测试工程师必读经典好书,你读过几本?
- 跨境电商选品:如何判断产品市场容量?
- linux一些简单的操作命令
- 【字符串】Hash表
- vue 根据后台提供的值判断登录、未登录状态
- 西游记中被孙悟空打死的妖怪
热门文章
- python3 最基本且简单的实现组合设计模式
- abb机器人指令手册_第1519课 ABB机器人初级教程
- 佛门重地,不适合搞这种事!!
- 1300多名硕博研究生被清退!全都是活该?真相有时候比表面更让人无奈......
- 一生只有43年,喜欢泡妹打架,却凭借一篇文章震惊世界,跻身一流数学家
- 到底要不要拯救地球?真·逻辑鬼才!| 今日最佳
- php round 取余,PHP round() 函数
- 一寸照纯红色底图片_和记场下载
- 马斯克脑机接口_马斯克的脑机接口,让我倍感担忧
- php文字左右滚动代码,JavaScript