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/

猜你喜欢

1、GitHub 标星 3.2w!史上最全技术人员面试手册!FackBoo发起和总结

2、如何才能成为优秀的架构师?

3、从零开始搭建创业公司后台技术栈

4、程序员一般可以从什么平台接私活?

5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...

6、滴滴业务中台构建实践,首次曝光

7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事

8、15张图看懂瞎忙和高效的区别!

Java序列化 3 连问,这太难了吧!相关推荐

  1. java序列化机制之protoStuff

    之前曾经写了两篇java的序列的机制,一种是默认的java序列化机制,这种方式效率太低.另外一种是谷歌的protobuf,但是这种我们还要写proto文件,并且我们还要使用工具来编译生成java文件, ...

  2. 54. Java序列化三连问,是什么?为什么需要?如何实现?

    Java序列化三连问,是什么?为什么需要?如何实现? 1,序列化和反序列化的概念 2,什么情况下需要序列化 3,java如何实现序列化 遇到这个 Java Serializable 序列化这个接口,我 ...

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

    Java序列化与反序列化是什么? Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: 序列化:对象序列化的最主要的用处就是在传递和保存对象 ...

  4. java json太长_修复Long类型太长,而Java序列化JSON丢失精度问题的方法

    Java序列化JSON时long型数值,会出现精度丢失的问题. 原因: java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值). 解决办法一: 使用 ...

  5. biginteger和long精度_修复Long类型太长,而Java序列化JSON丢失精度问题的方法

    造成原因:JS内置有32位整数,而number类型的安全整数是53位.如果超过53位,则精度会丢失.正如现在后台传来一个64位的Long型整数,因此超过了53位,所以后台返回的值和前台获取的值会不一样 ...

  6. Java面试题 详解 由易到难

    目录 1.   Java 基础 2.   容器 3.   多线程 4.   反射 5.   对象拷贝 6.   Java Web 7.   异常 8.   网络 9.   设计模式 10. Sprin ...

  7. 2020年Java面试经典100问,进入BAT不是梦

    本文由公众号「Java旅途」整理,设计到的内容由java基础.数据库.SSM框架.redis.消息队列.spring boot.spring cloud.git及一些前端知识.整理时间为2019-11 ...

  8. 不是广告--如何学Java,我说点不太一样的学习方式

    首先声明,这篇文章不是卖课程.介绍培训班的广告. 最近有不少读者通过微信问我:小白应该怎么学好 Java? 提问的人里有在校大学生.有刚参加工作的.有想转行做程序员的,还有一部分是最近找工作不顺的. ...

  9. 本地缓存需要高时效性怎么办_太难为我了,为了这份P7岗offer,我承受了7轮面试...

    前言 今年的大环境非常差,互联网企业裁员的现象比往年更严重了,可今年刚好是我的第一个"五年计划"截止的时间点,说什么也不能够耽搁了,所以早早准备的跳槽也在疫情好转之后开始进行了.但 ...

  10. java 将3变为03,03 Java序列化引发的血案

    1.前言 <手册>第 9 页 "OOP 规约" 部分有一段关于序列化的约定 [强制]当序列化类新增属性时,请不要修改 serialVersionUID 字段,以避免反序 ...

最新文章

  1. 依然持有比特币,Roger Ver谈投资心经
  2. pongo - 字符串消除
  3. Andriod 破解之道(一)
  4. centos7自带python版本_CentOS7保留默认Python版本并安装更新Python2和Python3共存
  5. 微软出品 Kubernetes 最新学习指南 v3.0
  6. 用js控制video的src_百度知道
  7. CSS基础(part6)--CSS的颜色表示
  8. zigbee与WiFi模块和蓝牙模块的区别是什么?
  9. vue+mintUI搭建移动端新闻类网站
  10. 安装配置 TensorFlow on Android
  11. 剑指offer——面试题42-1:左旋转字符串
  12. Vue学习笔记进阶篇——多元素及多组件过渡
  13. ProceXP超级进程查看管理工具
  14. 【转载】Log4j配置详解之log4j.xml
  15. 新知实验室_初探腾讯云音视频
  16. Android NDK——实战演练之使用Android Studio引用so库,jar包、module,aar以及导入Eclipse项目并使用JNI的正确姿势(一)
  17. ELEMENTARY: Is Even
  18. 【独行秀才】macOS Monterey 12.0 Beta4(21A5294g)原版镜像
  19. 如何在一周内快速摸清一个行业?
  20. 看小伙是怎么发现CSDN前10大佬之间的关系的

热门文章

  1. Python 之 向上取整、向下取整以及四舍五入函数
  2. 常去的国外网站一览表
  3. LAN to LAN IPSEC ××× 的配置报告
  4. poj 1226 Substrings kmp 好题,我调试了一晚上啊!!汗
  5. 树状数组的讲解感觉挺好,和我的一维,二维,树状数组的模板,希望对大家有用
  6. 苹果mac微软表格处理工具:microsoftexcel
  7. MacBook高效优先设置,你都开启了吗?
  8. Posterino for Mac(图片拼贴编辑器)
  9. 纠结mac和pc怎么选,可以看看这个
  10. Millumin 3 for mac使用教程-创建一个简单的视频映射