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

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()