ObjectInputStream类

2024-03-18 15:44
文章标签 objectinputstream

本文主要是介绍ObjectInputStream类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

3.3 ObjectInputStream类

ObjectInputStream反序列化流,将之前使用ObjectOutputStream序列化的原始数据恢复为对象。

构造方法

  • public ObjectInputStream(InputStream in) : 创建一个指定InputStream的ObjectInputStream。

反序列化操作1

如果能找到一个对象的class文件,我们可以进行反序列化操作,调用ObjectInputStream读取对象的方法:

  • public final Object readObject () : 读取一个对象。
public class DeserializeDemo {public static void main(String [] args)   {Employee e = null;try {		// 创建反序列化流FileInputStream fileIn = new FileInputStream("employee.txt");ObjectInputStream in = new ObjectInputStream(fileIn);// 读取一个对象e = (Employee) in.readObject();// 释放资源in.close();fileIn.close();}catch(IOException i) {// 捕获其他异常i.printStackTrace();return;}catch(ClassNotFoundException c)  {// 捕获类找不到异常System.out.println("Employee class not found");c.printStackTrace();return;}// 无异常,直接打印输出System.out.println("Name: " + e.name);	// zhangsanSystem.out.println("Address: " + e.address); // beiqingluSystem.out.println("age: " + e.age); // 0}
}

对于JVM可以反序列化对象,它必须是能够找到class文件的类。如果找不到该类的class文件,则抛出一个 ClassNotFoundException 异常。

反序列化操作2

**另外,当JVM反序列化对象时,能找到class文件,但是class文件在序列化对象之后发生了修改,那么反序列化操作也会失败,抛出一个InvalidClassException异常。**发生这个异常的原因如下:

  • 该类的序列版本号与从流中读取的类描述符的版本号不匹配
  • 该类包含未知数据类型
  • 该类没有可访问的无参数构造方法

Serializable 接口给需要序列化的类,提供了一个序列版本号。serialVersionUID 该版本号的目的在于验证序列化的对象和对应类是否版本匹配。

public class Employee implements java.io.Serializable {// 加入序列版本号private static final long serialVersionUID = 1L;public String name;public String address;// 添加新的属性 ,重新编译, 可以反序列化,该属性赋为默认值.public int eid; public void addressCheck() {System.out.println("Address  check : " + name + " -- " + address);}
}

这篇关于ObjectInputStream类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/822840

相关文章

利用ObjectInputStream、ObjectOutputStream序列化多个对象

内容:序列化多个对象,利用一个容器存储你要序列化的多个对象。 class Student implements java.io.Serializable{private String name;public Student(String name) {this.name = name;}public String getName() {return name;}public void

(每日持续更新)jdk api之ObjectInputStream基础、应用、实战

博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。 以后我会推出一些列的文章,每天

ObjectInputStream、ObjectOutputStream在TCP的使用

目录 1. 序列化 (1) 序列化ObjectOutputStream (2) 反序列化ObjectInputStream 2. 在TCP连接中的Socket使用 3. 常见报错 (1) java.io.StreamCorruptedException: invalid type code: AC <1>  数据无法序列化 <2>  数据流混乱、损坏 <3>  类的UID不匹配

ObjectOutputStream 和 ObjectInputStream的使用

一、看一下API文档 ObjectOutputStream : ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象。 只能将支持 java.io.Serializa

IO流-ObjectInputStream对象处理流(序列化与反序列化)

对象处理流 ObjectInputStream (反序列化), ObjectOutputStream(序列化) 在开发中会有这样一些需求, 例如 要求将 int 100 , Dog对象 序列化到 文件中, 需要时再反序列化 到 代码中。  序列化和反序列化 1.序列化就是在保存数据时,保存数据的值和数据类型 2.反序列化就是在恢复数据时,恢复数据的值和数据类型 3.需要让某个对象支持序

Java笔记:序列化、反序列化、ObjectOutputStream类、ObjectInputStream类

目录 1 概述2 ObjectOutputStream类2.1 构造方法2.2 序列化条件2.3 写出对象方法 3 ObjectInputStream类3.1 构造方法3.2 读入对象方法3.3 反序列化异常及处理 4 练习:序列化集合4.1 案例分析4.2 案例实现 1 概述 Java 提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该对象的数据、对

出现The type java.io.ObjectInputStream cannot be resolved. It is indirectly ......问题的解决方法快捷有效

出现The type java.io.ObjectInputStream cannot be resolved. It is indirectly …问题的解决方法~快捷有效 在MyEclipse学习Servlet的过程中,在src下的servlets包中创建一个java类,出现了以下的问题: 摸索了许久终于找到解决方案,原来在配置Tomcat7.0 的时候自己设置了JRE的1.8版本,而

[Java 12 IO] Serializable 初步 ObjectOutputStream ObjectInputStream 将序列化的对象打出来

Person 类, 序列化后就代表对象可以作为二进制的数据流进行传输 package com.qunar.basicJava.javase.io.serializable;import java.io.Serializable;/*** Author: libin.chen@qunar.com Date: 14-6-6 10:21*/public class Person implement

Java IO ObjectInputStream和ObjectOutputStream

ObjectInputStream 和 ObjectOutputStream 的作用是,对基本数据和对象进行序列化操作支持。 创建“文件输出流”对应的ObjectOutputStream对象,该ObjectOutputStream对象能提供对“基本数据或对象”的持久存储;当我们需要读取这些存储的“基本数据或对象”时,可以创建“文件输入流”对应的ObjectInputStream,进而读取出这些“