首页 > 其他分享 >00022.14 对象的序列化和反序列化的概述:ObjectOutputStream和ObjectInputStream

00022.14 对象的序列化和反序列化的概述:ObjectOutputStream和ObjectInputStream

时间:2023-02-20 12:34:01浏览次数:41  
标签:输出 ObjectOutputStream 读取 ObjectInputStream 对象 序列化 字节


对象的序列化和反序列化目录

ObjectOutputStream和ObjectInputStream

文章目录

  • ​​对象的序列化和反序列化目录​​
  • ​​前言​​
  • ​​一、对象的序列化和反序列化是什么?​​
  • ​​对象的序列化和反序列化​​
  • ​​为什么会报错?​​
  • ​​读取:反序列​​
  • ​​总结​​

前言

序列:就是排队的意思,
对象序列化即把对象转为字节序列,序列化的过程
对象的序列化和反序列化:ObjectOutputStream和ObjectInputStream
ObjectOutputStream:用于输出对象,把对象转成字节数据输出

一、对象的序列化和反序列化是什么?

对象的序列化和反序列化

ObjectOutputStream:用于输出对象,把对象转成字节数据输出,对象的输出过程称为序列化。

ObjectOutputStream比OutputStream多了很多方法,其中一个是 writeObject(obj)

如果这段代码是一个对象

00022.14 对象的序列化和反序列化的概述:ObjectOutputStream和ObjectInputStream_序列化

再举个更直观的例子 创建一个user类

00022.14 对象的序列化和反序列化的概述:ObjectOutputStream和ObjectInputStream_文件读写_02


我们现在不是想写一段一段文字,

而是直接把对象写进去

怎么写

00022.14 对象的序列化和反序列化的概述:ObjectOutputStream和ObjectInputStream_文件读写_03

ObjectOutputStream:用于输出对象,把对象转成字节数据输出,对象的输出过程称为序列化。

ObjectOutputStream比OutputStream多了很多方法,其中一个是 writeObject(obj)

00022.14 对象的序列化和反序列化的概述:ObjectOutputStream和ObjectInputStream_反序列化_04


00022.14 对象的序列化和反序列化的概述:ObjectOutputStream和ObjectInputStream_文件读写_05


报这个错误怎么解决?

为什么会报错?

如果没有实现Serializable接口的类型(即上图的u对象)

在序列化时,报错误NotSerializableException,不能序列化

要解决,User类必须要实现java.io.Serializable接口

00022.14 对象的序列化和反序列化的概述:ObjectOutputStream和ObjectInputStream_反序列化_06


00022.14 对象的序列化和反序列化的概述:ObjectOutputStream和ObjectInputStream_反序列化_07

【理解】就像护照,你有护照就是合法出入境,没有护照就是偷渡

实现这个接口就行了

完成以后我们看一下效果,似乎是乱糟糟的,只能看到一点影子

00022.14 对象的序列化和反序列化的概述:ObjectOutputStream和ObjectInputStream_序列化_08


即返回的是整个对象的所有信息

00022.14 对象的序列化和反序列化的概述:ObjectOutputStream和ObjectInputStream_反序列化_09


只能将支持 java.io.Serializable 接口的对象写入流中。每个 serializable 对象的类都被编码,编码内容包括类名和类签名、对象的字段值和数组值,以及从初始对象中引用的其他所有对象的闭包。

writeObject 方法用于将对象写入流中。所有对象(包括 String 和数组)都可以通过 writeObject 写入。可将多个对象或基元写入流中。必须使用与写入对象时相同的类型和顺序从相应 ObjectInputstream 中读回对象。

读取:反序列

现在我们读取一下,要注意的是这个对象也只能java程序去读,别的程序是不能读取的

读取的过程就叫反序列化

ObjectInputstream:用于输入对象,把字节序列转为对象读取,对象的读取过程称为反序列化。

ObjectInputstream比InputStream多了很多方法,其中一个是 Object readObject()

00022.14 对象的序列化和反序列化的概述:ObjectOutputStream和ObjectInputStream_序列化_10

总结

1、 ObjectOutputStream:用于输出对象,把对象转成字节数据输出,对象的输出过程称为序列化。
ObjectOutputStream比OutputStream多了很多方法,其中一个是 writeObject(obj)
2、 ObjectInputstream:用于输入对象,把字节序列转为对象读取,对象的读取过程称为反序列化。
ObjectInputstream比InputStream多了很多方法,其中一个是 Object readObject()


标签:输出,ObjectOutputStream,读取,ObjectInputStream,对象,序列化,字节
From: https://blog.51cto.com/u_15800767/6068301

相关文章

  • Fastjson2基础使用以及底层序列化/反序列化实现探究
    1Fastjson2简介Fastjson2是Fastjson的升级版,特征:协议支持:支持JSON/JSONB两种协议部分解析:可以使用JSONPath进行部分解析获取需要的值语言支持:Java/Kotlin场景支持:An......
  • java序列化反序列化
    序列化概述序列化:将数据结构或对象转换成二进制字节流的过程反序列化:将在序列化过程中所生成的二进制字节流转换成数据结构或者对象的过程TCP/IP四层模型transient......
  • Hadoop序列化
    序列化定义把内存中的数据持久化(把内存中的对象转换为字节码文件存储带磁盘上)和网络传输。反序列化定义反序列化就是把接收到的字节序列(或其它协议传输的数据)或......
  • Django Rest Frame work 如何使用serializers序列化函数新手教程
    DjangoRestFramework如何使用serializers序列化   DjangoRestFramework提供了serializers模块,用于序列化和反序列化模型实例以及原生数据类型......
  • Django Rest Frame work 如何使用serializers序列化
    DjangoRestFramework如何使用serializers序列化   DjangoRestFramework提供了serializers模块,用于序列化和反序列化模型实例以及Python原生数......
  • serializers序列化函数简单入门
    1.创建Django项目和应用程序首先,我们需要创建一个Django项目和一个Django应用程序。如果你已经有了Django项目和应用程序,请跳过这一步。$django-adminstartprojectm......
  • .Net Core WebAPI 序列化时忽略空值字段
    特定实体publicclassAPIResponseModel{///<summary>///返回标识,200:成功,其它:失败///</summary>publicstringCo......
  • 8.drf-序列化器
    在序列化类中,如果想使用request,则可以通过self.context['request']获取序列化器的主要由两大功能-对请求的数据进行校验(底层调用的是Django的Form和ModelForm)-对数......
  • C# 序列化 反序列化
    ///<summary>///序列化///</summary>///<paramname="obj"></param>///<returns></returns>privatestaticbyte[]?Serialize(objectobj){if(obj==n......
  • CVE-2023-0669 GoAnywhereMFT反序列化漏洞复现
    免责声明文中提到的所有技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途,否则产生的一切后果自行承担,与本文作者无关!GoAnywhereMFTGoAnywher......