目录

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序列化、反序列化相关推荐

  1. java序列化 反序列化_Java序列化– Java序列化

    java序列化 反序列化 Serialization in Java was introduced in JDK 1.1 and it is one of the important feature ...

  2. Java 序列化反序列化框架比较

    文章目录 一.简介 二.序列化框架 1.JDK 2.XML序列化 3.JSON序列化 4.Hessian 5.Avro序列化 6.Kyro序列化 7.Protostuff 三.序列化框架对比测试 1. ...

  3. java序列化方式性能比较

    来源:http://john521.iteye.com/blog/1099574 有一个很不错的工具http://github.com/eishay/jvm-serializers/ ,可以用它来评测 ...

  4. Java Hessian反序列化漏洞

    漏洞简介 Hessian是一个轻量级的remoting onhttp工具,是一个轻量级的Java序列化/反序列化框架,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单 ...

  5. java序列化方案对比

    1.引言 目前移动客户端应用程序上,需要将用户内容持久化到设备上,一般任何feed流应用,如微博.推特.新闻客户端等都需要将内容做持久化操作,以便在内存回收后,再次进入程序能迅速恢复之前的内容.另外如 ...

  6. [Java] 序列化(Serialization)的本质是什么?在Java中怎么实现?为什么要了解序列化技术?序列化技术选型要点是什么?

    文章目录 前言 序列化是什么? 理解对象在内存中是如何存储的 数据在进程内存中的分布图 数据被序列化之后在内存中的分布图 序列化/反序列化的本质? 序列化在Java中的实现? 1. JDK Seria ...

  7. 用 XStream 序列化/反序列化 XML 为 Java 对象(实例)

    用 XStream 序列化/反序列化 XML 为 Java 对象(实例) Posted on 2007-06-05 19:06 Stephen Wong 阅读(1224) 评论(0)  编辑 收藏 网 ...

  8. Java序列化的作用和反序列化

    1.序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存object states,但 ...

  9. java list反序列化_java序列化与反序列化操作实例分析

    本文实例分析了java序列化与反序列化操作.分享给大家供大家参考,具体如下: 概述: Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程. ...

  10. Java序列化和反序列化小记

    序列化:将java对象转换为字节序列的过程叫做序列化 反序列化:将字节对象转换为java对象的过程叫做反序列化 通常情况下,序列化有两种用途: 1) 把对象的字节序列永久的保存在硬盘中 2)在网络上传 ...

最新文章

  1. Elasticsearch 为什么能做到快速检索?— 倒排索引的秘密
  2. 含有多个java程序的文件夹导入MyEclipes 出现错误的解决办法
  3. 行转列(FOR XML PATH)
  4. iView学习笔记(三):表格搜索,过滤及隐藏列操作
  5. 容器编排技术 -- Kubernetes kubectl patch 命令详解
  6. vs2010 代码混淆 代码加密
  7. rmmod无法卸载驱动_AMD芯片组驱动更新:优化了RYZEN CPU供电调节
  8. Oct 12: Patch Set Update Released
  9. win10电脑虚拟网络设置方法
  10. java severs_openssl简介-指令s_server
  11. 双系统启动修复完整解决方案
  12. IMPLEMENT_DYNAMIC
  13. linux 卸载windows系统服务,如何卸载windows系统
  14. python画人脸代码_10行代码实现python人脸识别
  15. 书单 | 测试工程师必读经典好书,你读过几本?
  16. 跨境电商选品:如何判断产品市场容量?
  17. linux一些简单的操作命令
  18. 【字符串】Hash表
  19. vue 根据后台提供的值判断登录、未登录状态
  20. 西游记中被孙悟空打死的妖怪

热门文章

  1. python3 最基本且简单的实现组合设计模式
  2. abb机器人指令手册_第1519课 ABB机器人初级教程
  3. 佛门重地,不适合搞这种事!!
  4. 1300多名硕博研究生被清退!全都是活该?真相有时候比表面更让人无奈......
  5. 一生只有43年,喜欢泡妹打架,却凭借一篇文章震惊世界,跻身一流数学家
  6. 到底要不要拯救地球?真·逻辑鬼才!| 今日最佳
  7. php round 取余,PHP round() 函数
  8. 一寸照纯红色底图片_和记场下载
  9. 马斯克脑机接口_马斯克的脑机接口,让我倍感担忧
  10. php文字左右滚动代码,JavaScript