什么是序列化?
为了把对象的成员属性和成员方法进行持久化的保存,需要把对象转换为字节序列,以便于存储,这个过程就叫序列化。

反之,反序列化就是把字节序列恢复成对象。

  1. 实现序列化的对象需要实现一个标记接口,并且给这个添加一个Long类型的标记
Serializable 这个接口里面没有任何东西,只是作为一个标记
private static final long serialVersionUID = 1L;常量,默认设置为1L

当我们进行序列化和反序列化时就会检测该类上面是否有这个标记,没有会抛出异常 NotSerializableException

  1. 使用ObjectOutputStreamwriteObject()方法写入对象
public class ObjectOutputStreamextends OutputStream implements ObjectOutput, ObjectStreamConstants{}

该类继承了字节流的输出流OutputStream

  1. 要读取时,使用ObjectInputStream类的readObject()方法
public class ObjectInputStreamextends InputStream implements ObjectInput, ObjectStreamConstants
{}

该类继承字节流的输入流InputStream

package com.study.SerializableImpl;import java.io.Serializable;/*** @Description 实现对象序列化* @Date 2021/9/12 13:09* @Created by 折腾的小飞*/
public class Student implements Serializable {private static final long serialVersionUID = 1L;private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Student() {}public Student(String name, Integer age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}
package com.study.SerializableImpl;import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/*** @Description 3种方法实现对象的反序列化* @Date 2021/9/12 14:23* @Created by 折腾的小飞*/
public class StudentSerializable {public static void main(String[] args) {Student stu = new Student("胡梓卓", 22);Student stu1 = new Student("涂鏊飞", 21);Student[] stus = {stu, stu1};try {ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("./stu.txt")));/*oos.writeObject(stus); // 写入一个对象数组oos.flush();*/// 遍历写入单个对象/*for (Student student : stus) {oos.writeObject(student);oos.flush();}oos.writeObject(null);*/for (Student student : stus) {oos.writeObject(student);oos.flush();}System.out.println("对象序列化成功");ObjectInputStream ois = new ObjectInputStream(new FileInputStream("./stu.txt"));// 存入文件时,将几个对象放入一个Object[] 数组中,然后再读取。/*Object[] arrStu = (Object[]) ois.readObject();for (Object o : arrStu) {System.out.println(o);}*/// 第二种方法,在写入时最后写入null/*Student s=null;while ((s= (Student) ois.readObject())!=null){System.out.println(s);}*/// 用available判断是否达到了文件末尾/*Object obj = null;while (ois.available() > 0) {obj = ois.readObject();System.out.println(obj);}*//*System.out.println(ois.available());*/System.out.println("对象反序列化成功");oos.close();ois.close();} catch (IOException e) {e.printStackTrace();}}
}

把两个对象stu和stu1写入文件stu.txt后,查看文件

�� sr "com.study.SerializableImpl.Student        L aget Ljava/lang/Integer;L namet Ljava/lang/String;xpsr java.lang.Integer⠤���8 I valuexr java.lang.Number������  xp   t  胡梓卓sq ~  sq ~    t  涂鏊飞

对象的序列化和反序列化相关推荐

  1. Java对象的序列化与反序列化

    序列化与反序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.一般将一个对象存储至一个储存媒介,例如文件或是内存缓冲区等.在网络传输过程中,可以是字节或是 ...

  2. java中对象的序列化和反序列化

    [对象的序列化和反序列化 ] 1.定义: 序列化--将对象写到一个输出流中.反序列化则是从一个输入流中读取一个对象.类中的成员必须是可序列化的,而且要实现Serializable接口,这样的类的对象才 ...

  3. Java 对象的序列化和反序列化

    当两个进程在进行远程通信时,彼此可以发送各种类型的数据.无论是何种类型的数据,都会以二进制序列的形式在网络上传送.发送方需要把这个Java对象转换为字节序列,才能在网络上传送:接收方则需要把字节序列再 ...

  4. 对象的序列化与反序列化---IO学习笔记(四)

    对象的序列化,反序列化 对象的序列化: 就是将Object转换成byte序列 对象的反序列化: 将byte序列转换成Object 序列化流,反序列化流 序列化流(ObjectOutputStream) ...

  5. js笔记(三)ES5、ES5新增的数组的方法、字符串的方法、字符编码、对象的序列化和反序列化、bind

    数组方法.字符串方法总结 大目录 小目录 一.ES5严格模式 1. 严格模式: 2. 严格模式的行为变更: 二.ES5新增的数组的方法 1. 判断是否为数组:Array.isArray(): 2. 判 ...

  6. java对象的序列化和反序列化详细解释

    java对象的序列化和反序列化是什么意思 1.序列化是干啥用的? 序列化的原本意图是希望对一个Java对象作一下"变换",变成字节序列,这样一来方便持久化存储到磁盘,避免程序运行结 ...

  7. 一文带你全面了解java对象的序列化和反序列化

    本文分享自华为云社区<java中什么是序列化和反序列化?>,原文作者:dayu_dls . 这篇文章主要给大家介绍了关于java中对象的序列化与反序列化的相关内容,文中通过详细示例代码介绍 ...

  8. 反序列化对象列表发生异常_面试官:你知道Java对象的序列化与反序列化背后的原理吗?...

    序列化与反序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等.在网络传输过程中,可以是字节或是 ...

  9. java反序列化多个对象_java 序列化与反序列化多个对象 抛出异常

    jdk 1.8 IEDA 设置可以追加写入后,向目标文件序列化多个同一对象,再序列化出来时,因为反序列化时头部信息只读取一次,报出异常. 请问该怎么解决?或者代码写的有问题? import java. ...

  10. 从零开始学前端:json对象,对象的序列化和反序列化 --- 今天你学习了吗?(JS:Day15)

    从零开始学前端:程序猿小白也可以完全掌握!-今天你学习了吗?(JS) 复习:从零开始学前端:字符串.数组的方法 - 今天你学习了吗?(JS:Day12/13/14) 文章目录 从零开始学前端:程序猿小 ...

最新文章

  1. Java oracle查询语句无法赋值给_java.sql.SQLException: 无法转换为内部表示 -〉java 查询oracle数据库返回错误信息...
  2. OpenGL 绘制grass草的实例
  3. 国开mysql答案_国开MySQL数据库应用形考任务.doc
  4. flex布局_Flex布局,真香
  5. [探索][管理]《现在,发现你的优势》
  6. HTML怎么把文字分栏_html代码怎样优化更利于SEO排名
  7. Linux安全运维进阶:SSH常见配置
  8. php修改学生信息代码_PHP连接MySQL数据库添加图书功能
  9. camera主观测试_镜头测试:日本富士EBC 135/2.5+索尼A7微单实拍北京北海公园
  10. eclipse 闪退原因
  11. 信息论基础 thomas 2nd ed
  12. 如何修改Tomcat默认端口号
  13. 小米电视联网后显示无法解析小米电视服务器,小米电视机功能详解 教你轻松使用...
  14. 浅谈RRU、FPGA、ORAN
  15. thinkphp使用ajax、jquery、Mysql实现了简单的客户端通信功能
  16. 知行合一ArduPilot | ArduPilot系统框架简述
  17. 《鸟哥的Linux私房菜》chapter9 20180818~20180826
  18. 贝壳找房:如何基于 Apache APISIX 搭建网关
  19. [Power Query] 标题提升
  20. STEP标准执行方法-ISO-10303-21

热门文章

  1. R语言入门——ggplot2
  2. 面向对象一类与对象的概念与特性
  3. 用php计算自由落体,js模仿物理中的自由落体现象
  4. php屏蔽审查元素,前端:屏蔽F12审查元素,禁止修改页面代码
  5. python 整数 拆分 分段
  6. python计算两个向量之间的欧氏距离
  7. 【ES6】异步操作和async函数
  8. EasyTouch初步使用
  9. 计算机二级中的html那道题,计算机等级考试题库:这10道二级C++语言试题是个坑,你居然不知道...
  10. C++_STL——deque and vector