java.io.ObjectInputStream类详解
1.public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants
分析:ObjectInputStream是将对象的原始数据序列化,ObjectOutputStream将序列化的数据反序列化。当分别使用FileInputStream和FileOutStream做为输入和输出流ObjectInputStream和ObjectOutputStream是可以提供持久化的应用程序。ObjectInputStream 用于恢复先前序列化的对象,其它的用途包括主机之间使用socket流传递对象、远程系统调用。
ObjectInputStream 确保所有的对象类型跟Java虚拟机中的一样,使用标准机制按要求加载。
只有对象支持java.io.Serializable或java.io.Externalizable接口的才能够被从流中读取。
方法readObject是被用来从流中读取对象,java的安全性应该被用来获取想要的类型,在Java中,string和arrays在序列化时是被当做对象,读取时把它们转换成期望的类型。
原始数据类型可以直接使用DataInput接口中期望的方法读取。
默认的反序列化机制是恢复每个字段在写入的时候的值,字段声明为transient或static是会被反序列化进程忽略掉的,对其它对象的引用会使在必要的时候从流中读取,使用引用共享机制正确的恢复对象,反序列化时新的对象会被创建,以防止现有对象被覆盖。
读取对象类似于运行新对象的构造函数,内存被分配给对象并初始化为零(null),非序列化类的无参构造函数被调用然后序列化字段的类是从流中恢复。
例如:从示例中的流中读取ObjectOutputStream:
FileInputStream fis = new FileInputStream("t.tmp");
ObjectInputStream ois = new ObjectInputStream(fis);
int i = ois.readInt();
String today = (String) ois.readObject();
Date date = (Date) ois.readObject();
ois.close();
类通过控制实现java.io.Serializable 和java.io.Externalizable接口来实现序列化。
实现序列化接口允许序列化对象保存和恢复实体状态并且它允许类在流写入时间和写入的时间之间演进,它自动遍历对象之间的引用,保存和恢复实体的状态。
序列化的类,需要特殊处理的序列化和反序列化过程中应实现以下的方法:
private void writeObject(java.io.ObjectOutputStream stream)
throws IOException;
private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException;
private void readObjectNoData()
throws ObjectStreamException;
readObject方法负责阅读和使用相应的writeObject方法流写入的数据恢复其特定的类的对象的状态。该方法不需要担心其属于超类或者子类的状态,状态的恢复是从ObjectInputStream 中读取的字段和对象,读取原始数据类型是被DataInput接口支持的。
————————————————
原文链接:https://blog.csdn.net/yaomingyang/article/details/79345985
java.io.ObjectInputStream类详解的更多相关文章
- java之StringBuffer类详解
StringBuffer 线程安全的可变字符序列. StringBuffer源码分析(JDK1.6): public final class StringBuffer extends Abstract ...
- java之StringBuilder类详解
StringBuilder 非线程安全的可变字符序列 .该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍).如果可能,建议优先采用该类,因为在 ...
- java之AbstractStringBuilder类详解
目录 AbstractStringBuilder类 字段 构造器 方法 public abstract String toString() 扩充容量 void expandCapacity(in ...
- java.lang.Thread类详解
java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...
- Java中dimension类详解
Java中dimension类详解 https://blog.csdn.net/hrw1234567890/article/details/81217788
- java之Matcher类详解
在JDK 1.4中,Java增加了对正则表达式的支持. java与正则相关的工具主要在java.util.regex包中:此包中主要有两个类:Pattern.Matcher. Matcher 声明: ...
- java的ReentrantLock类详解
ReentrantLock 能用于更精细化的加锁的Java类, 通过它能更清楚了解Java的锁机制 ReentrantLock 类的集成关系有点复杂, 既有内部类, 还有多重继承关系 类的定义 pub ...
- JDK1.8 java.io.Serializable接口详解
java.io.Serializable接口是一个标志性接口,在接口内部没有定义任何属性与方法.只是用于标识此接口的实现类可以被序列化与反序列化.但是它的奥秘并非像它表现的这样简单.现在从以下几个问题 ...
- java.io.DataInput接口和java.io.DataOutput接口详解
public interface DataInput DataInput 接口用于从二进制流中读取字节,并重构所有 Java 基本类型数据.同时还提供根据 UTF-8 修改版格式的数据重构 Strin ...
随机推荐
- if语句、while和for循环
一.if语句 1.多路分支 if 条件1: 代码块1 elif 条件2: 代码块2 else: 代码块3 #python会执行第一次测试为真的语句,如果所有测试都为假,就执行else部分(本例) 2. ...
- Django查找数据库objects.filter() 排序order_by Q()与或非 F()属性之间比较 聚合函数的用法
条件选取QuerySet的时候,filter表示=参数可以写查询条件,exclude表示!=,querySet.distinct() 去重复(除了get返回值都是QuerySet,可以继续调用所有函数 ...
- 第一个vue程序:hello,vlue
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- vsftp多个用户公享同一个文件,但是权限不同
如标题:vsftp多个用户公享同一个文件,但是权限不同.如何做到呢.首先创建多个用户,并且指定同一个目录
- Neo4j查询语句总结
最近一直在做图数据库的相关工作,对neo4j的查询语言Cypher使用较多,故在此总结记录.Cypher作为图数据库的查询语言,感觉和关系型数据库的查询语言sql差不多吧. 1.如何找到一个节点x,x ...
- PAT-1003 Emergency (25 分) 最短路最大点权+求相同cost最短路的数量
As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...
- hdu 4333 扩展kmp+kmp重复字串去重
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4333 关于kmp next数组求最短重复字串问题请看:http://www.cnblogs.com/z ...
- php 环境搭建问题
项目过程中需要用到 PHP环境 https://www.cnblogs.com/cyrfr/p/6483529.html APACHE无法启动:THE REQUEST OPERATION HAS FA ...
- JDK1.8新特性(一) ----Lambda表达式、Stream API、函数式接口、方法引用
jdk1.8新特性知识点: Lambda表达式 Stream API 函数式接口 方法引用和构造器调用 接口中的默认方法和静态方法 新时间日期API default Lambda表达式 L ...
- webpack最基本的使用方式
1.创建文件夹"webpack-study" 2.使用webstrom打开文件夹所在位置.在根目录上创建一个文件,文件命名为“src”,在src文件下新建css.images.js ...