对象反序列化:

  • 使用到的流是对象字节输入流:ObjectInputStream
  • 作用:以内存为基准,把存储到磁盘文件中去的对象数据恢复成内存中的对象,称为对象反序列化

package per.mjn.serializable;import java.io.Serializable;/*** 对象要序列化,必须实现Serializable序列化接口*/
public class Student implements Serializable {private String name;private String loginName;// transient修饰的成员变量不参与序列化private transient String password;private int age;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", loginName='" + loginName + '\'' +", password='" + password + '\'' +", age=" + age +'}';}public Student() {}public Student(String name, String loginName, String password, int age) {this.name = name;this.loginName = loginName;this.password = password;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getLoginName() {return loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
package per.mjn.serializable;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;/*** 对象反序列化,使用对象字节输入流把文件中的对象数据恢复成内存中的Java对象*/
public class ObjectInputStreamDemo2 {public static void main(String[] args) throws IOException, ClassNotFoundException {// 1. 创建对象字节输入流管道包装低级的字节输入流管道ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("d:/obj.txt"));// 2. 调用对象字节输入流的反序列化方法Student student = (Student) inputStream.readObject();System.out.println(student);}
}

下面引入序列化版本号,如果序列化对象发生改动(序列号发生改变),此时直接反序列化会报错。

解决方案为,重新序列化一遍,然后再反序列化。

package per.mjn.serializable;import java.io.Serializable;/*** 对象要序列化,必须实现Serializable序列化接口*/
public class Student implements Serializable {// 声明序列化的版本号// 序列化的版本号与反序列化的版本号必须一致才不会出错!private static final long serialVersionUID = 2;private String name;private String loginName;// transient修饰的成员变量不参与序列化private transient String password;private int age;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", loginName='" + loginName + '\'' +", password='" + password + '\'' +", age=" + age +'}';}public Student() {}public Student(String name, String loginName, String password, int age) {this.name = name;this.loginName = loginName;this.password = password;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getLoginName() {return loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
package per.mjn.serializable;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;/*** 对象序列化,使用ObjectOutputStream将内存中的对象存入磁盘文件中* transient修饰的成员变量不参与序列化*/
public class ObjectOutputStreamDemo1 {public static void main(String[] args) throws IOException {// 1. 创建学生对象Student s = new Student("mjn", "mjn", "1111", 22);// 2. 对象序列化,使用对象字节输出流包装字节输出流管道ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("d:/obj.txt"));// 3. 直接调用序列化方法objectOutputStream.writeObject(s);// 4. 释放资源objectOutputStream.close();System.out.println("序列化完成");}
}
package per.mjn.serializable;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;/*** 对象反序列化,使用对象字节输入流把文件中的对象数据恢复成内存中的Java对象*/
public class ObjectInputStreamDemo2 {public static void main(String[] args) throws IOException, ClassNotFoundException {// 1. 创建对象字节输入流管道包装低级的字节输入流管道ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("d:/obj.txt"));// 2. 调用对象字节输入流的反序列化方法Student student = (Student) inputStream.readObject();System.out.println(student);}
}

Java基础-对象反序列化相关推荐

  1. [Java基础]对象(反)序列化流

    对象序列化流: 代码如下: package ObjectOutputStreamPack;import java.io.Serializable;public class Student implem ...

  2. 一天一个Java基础——对象和类

    1.在Java中你所做的全部工作就是定义类,产生那些类的对象,以及发送消息给这些对象 2.可以在类中设置两种类型的元素:字段(也被称作数据成员)和方法(也被称作成员函数) 3.字段可以是任何类型的对象 ...

  3. java基础—对象转型

    一.对象转型介绍 对象转型分为两种:一种叫向上转型(父类对象的引用或者叫基类对象的引用指向子类对象,这就是向上转型),另一种叫向下转型.转型的意思是:如把float类型转成int类型,把double类 ...

  4. Java基础- 对象相等判断

    hashCode equals == 对象相等判断 equals和==区别 hashCode 与 equals(重要) ※※ hashCode()介绍 hashCode()介绍(常见的几个问题) 为什 ...

  5. Java基础----对象与类

    一.面向对象程序设计概述 面向对象程序设计(oop) 二.类 类(class)是构造对象模板或蓝图 由类构造(construct)对象的过程称为创建类的实例(instance) 封装是处理对象的一个重 ...

  6. java基础---对象锁和类锁的区别

    synchronized 加到 static 方法前面是给class 加锁,即类锁:而synchronized 加到非静态方法前面是给对象上锁. 对象锁和类锁是不同的锁,所以多个线程同时执行这2个不同 ...

  7. Java基础学习总结——Java对象的序列化和反序列化

    一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...

  8. Java基础学习总结(14)——Java对象的序列化和反序列化

    2019独角兽企业重金招聘Python工程师标准>>> 一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象 ...

  9. 【重难点】【Java基础 04】值传递和引用传递、序列化和反序列化

    [重难点][Java基础 04]值传递和引用传递.序列化和反序列化 文章目录 [重难点][Java基础 04]值传递和引用传递.序列化和反序列化 一.值传递和引用传递 1.对比 二.序列化 1.基本概 ...

  10. 【java基础,IO合集】文件流、高级流(缓冲流、对象流)、 序列化接口java.io.Serrializable

    目录 文件流 1 块读写的文件复制操作 2 文件输出流-覆盖模式 3 文件输出流-追加模式 4 文件输出流-读取文本数据 高级流 1  流连接示意图 2 缓冲流 2.1 使用缓冲流完成文件复制操作 2 ...

最新文章

  1. html 遇到多个class时取当前行参数
  2. 【JavaScript】如何将JS中的数据提交到Servlet服务器中
  3. Scala入门到精通——第七节:类和对象(二)
  4. C语言反序输出英文句子,C++实现英文句子中的单词逆序输出的方法
  5. Linux系统下MySQL导出数据库和导入数据库的命令
  6. 电力设计手册_电气设计负荷计算方法
  7. 京东金融 App 收集隐私?开源库程序员不背锅!
  8. 漫画:“架构师”小赵的故事
  9. 计算机仿真软件的论文,【计算机仿真论文】计算机仿真软件模拟物流系统研究(共5366字)...
  10. Node.js-威富通H5微信支付
  11. 统信UOS升级Python3及安装spyder5
  12. JS特效一:图片轮播图(JS必须掌握的特效)
  13. 项目简要建设情况汇报材料报告
  14. 小编亲测:开售即遭“疯抢”的小度在家凭什么成了网红?
  15. 第14课:走向技术管理者的4种方式
  16. 藏苹果 HNSUT 1889
  17. Spring Boot熟稔于心的20个常识
  18. 股神涨跌求剩余股票价格
  19. r5 5600u和r5 4600u参数对比哪个好?
  20. [APIO2016]烟火表演

热门文章

  1. Linux .swp文件恢复
  2. can是什么时候处于显性_CAN总线什么情况下为空闲状态? - 全文
  3. kubernetes/k8s CRI 分析-kubelet删除pod分析
  4. [免费专栏] Android安全之Root检测与Root绕过(浅析)
  5. java+桌球小游戏图片_java实战之桌球小游戏
  6. 云服务器 搭建虚拟主机,云服务器 搭建虚拟主机
  7. os系统服务器防火墙怎么关闭,mac防火墙如何关闭
  8. 如何判断一个程序没有响应
  9. 小米5 Android 8.0解bl,小米8 刷机 解账号BL锁 隐藏帐户 免授权解锁刷机包-刷机之家...
  10. RH Timer pro for Mac(定时计时器软件)