Java序列化与反序列化是什么?

Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程:

  • 序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。核心作用是对象状态的保存与重建。
  • 反序列化:客户端从文件中或网络上获得序列化后的对象字节流,根据字节流中所保存的对象状态及描述信息,通过反序列化重建对象。

为什么需要序列化与反序列化?

为什么要序列化,那就是说一下序列化的好处喽,序列化有什么什么优点,所以我们要序列化。

一:对象序列化可以实现分布式对象。

主要应用例如:RMI(即远程调用Remote Method Invocation)要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样。

二:java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。

可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。

三:序列化可以将内存中的类写入文件或数据库中。

比如:将某个类序列化后存为文件,下次读取时只需将文件中的数据反序列化就可以将原先的类还原到内存中。也可以将类序列化为流数据进行传输。

总的来说就是将一个已经实例化的类转成文件存储,下次需要实例化的时候只要反序列化即可将类实例化到内存中并保留序列化时类中的所有变量和状态。

四:对象、文件、数据,有许多不同的格式,很难统一传输和保存。

序列化以后就都是字节流了,无论原来是什么东西,都能变成一样的东西,就可以进行通用的格式传输或保存,传输结束以后,要再次使用,就进行反序列化还原,这样对象还是对象,文件还是文件。

如何实现Java序列化与反序列化

首先我们要把准备要序列化类,实现 Serializabel接口

例如:我们要Person类里的name和age都序列化

import java.io.Serializable;public class Person implements Serializable { //本类可以序列化private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String toString() {return "姓名:" + this.name + ",年龄" + this.age;}
}

然后:我们将name和age序列化(也就是把这2个对象转为二进制,理解为“打碎”)

package org.lxh.SerDemo;import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;public class ObjectOutputStreamDemo { //序列化public static void main(String[] args) throws Exception {//序列化后生成指定文件路径File file = new File("D:" + File.separator + "person.ser");ObjectOutputStream oos = null;//装饰流(流)oos = new ObjectOutputStream(new FileOutputStream(file));//实例化类Person per = new Person("张三", 30);oos.writeObject(per); //把类对象序列化oos.close();}
}

一个很简单的示例,文章以应答面试提问为主,更深了解序列化与反序列化,需要你上网多参考资料。

比如:

《Java对象的序列化(Serialization)和反序列化详解》https://blog.csdn.net/yaomingyang/article/details/79321939
《Java 序列化的高级认识》https://www.ibm.com/developerworks/cn/java/j-lo-serial/

好了,学起来!

最近三期

【15期】谈谈这几个常见的多线程面试题

【16期】你能谈谈HashMap怎样解决hash冲突吗

【17期】什么情况用ArrayList or LinkedList呢?

与其在网上拼命找题? 不如关注我们~

Java中如何引用另一个类里的集合_【18期】Java序列化与反序列化三连问:是什么?为什么要?如何做?...相关推荐

  1. [转载] Java中如何引用另一个类里的集合_Java工程师面试题整理

    参考链接: 在Java中将预定义的类名用作类或变量名 花了一星期把学过的都整理一遍 尽量易懂,从基础到框架 最新版大厂面经汇总出炉,持续更新中 汇总完了上传网盘,设计到后端架构师的一切知识 如果没更新 ...

  2. java中异常处理try块的说法正确的是_下面关于Java中异常处理try块的说法正确的是( )?...

    下面关于Java中异常处理try块的说法正确的是( )? 答:可能抛出异常的方法调用应放在try块中. try块后通常应有一个catch 块,用来处理try块中抛出的异常. 滴定起点pH值提高,滴定突 ...

  3. java中Map有哪些实现类

    Java中的map是一个很重要的集合,他是一个接口,下面继承它实现了多个实现类,这些类各有千秋,各自有个各自的优点和缺点 如下图 map的主要特点是键值对的形式,一一对应,且一个key只对应1个val ...

  4. 类和对象系列教材 (一)- 什么是Java中的引用?

    类和对象系列教材 (一)- 什么是Java中的引用? 更多详细内容请点击这里,注册获取 引用的概念,如果一个变量的类型是 类类型,而非基本类型,那么该变量又叫做引用. 步骤1:引用和指向 步骤2:多个 ...

  5. java 为什么有匿名类_全面了解Java中的内部类和匿名类

    Java内部类(Inner Class),类似的概念在C++里也有,那就是嵌套类(Nested Class),乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了 ...

  6. Java中工程、包、类介绍

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/FX677588/article/det ...

  7. 在R.java中新建自定义的新类

    今天在写Android程序的时候,需要引用R.java文件中一些资源.如:R.color.color1 但是我弄了半天都不能在R.java文件中新建color的新类,原因很简单,R.java是不能被编 ...

  8. java虚引用作用_深入理解Java中的引用(二)——强软弱虚引用

    深入理解Java中的引用(二)--强软弱虚引用 在上一篇文章中介绍了Java的Reference类,本篇文章介绍他的四个子类:强引用.软引用.弱引用.虚引用. 强引用(StrongReference) ...

  9. java引用传递_理解Java中的引用传递和值传递

    关于Java传参时是引用传递还是值传递,是一个讨论比较多的话题, 有说Java中只有值传递,也有些地方说引用传递和值传递都存在,本篇记录思考过程,不保证正确性, 感兴趣的同学一起讨论. 1.基本类型和 ...

最新文章

  1. python中pop函数_Python中的Pop函数
  2. 陶哲轩实分析习题17.1.2
  3. opencv 转换图像为灰度
  4. C++类型转换: static_cast const_cast reinterpret_cast dynamic_cast
  5. linux做一个客户端与WemosD1作为服务器的无线通信(局域网通信)
  6. 易支付系统源码_刷脸支付系统源码,插件源码合作模式有哪些,采购源码需要注意什么...
  7. C语言——字符串函数
  8. 深浅克隆面试题汇总——附详细答案
  9. 罗永浩将重返高科技行业创业 将涉足AR/VR/MR领域
  10. Spring框架----Spring的依赖注入
  11. ARCGIS拓扑检查步骤
  12. Editplus从下载到使用
  13. 三十年了,读书依然不求甚解:一个普通程序员的读书生涯回顾
  14. 干货——图像分类(上)
  15. python课程回顾复习记录简要6
  16. BCD码指令 AAA DAA AAS DAS AAM AAD
  17. 东方博宜OJ 1231考试成绩的分布情况
  18. 有哪些比较好的wince 播放器 支持硬解的
  19. python 西门子触摸屏通讯_实例 | 博途V15 西门子S7-1200与触摸屏通信详解
  20. While.....Wend和Do While....Loop

热门文章

  1. HJ29 字符串加解密
  2. Cracer渗透视频课程学习笔记——基础知识(1)
  3. hadoop fs默认操作路径
  4. numpy.floor详解
  5. 【Hadoop】MAC下hadoop2.6安装以及执行wordcount
  6. shell启动sublime
  7. CCKS-2017 行业知识图谱构建与应用-下篇
  8. LIBSVM -- A Library for Support Vector Machines--转
  9. Linux CentOS PhpMyAdmin安装--转载
  10. 深入分析 Java I/O 的工作机制--转载