日期:2014-05-20  浏览次数:20801 次

哪位高人把ObjectInputStream的readObject的工作原理详细说明一下
如题

------解决方案--------------------
我的理解是,在writeObject的时候,是把对象的引用内存的信息按二进制方式(也就是byte数组)输出到某个输出流,而readObject的时候,首先取到输入流的内容,也是一个二进制的byte数组,然后根据一些算法(比如第几个字节到第几个字节代表对象的类,第几个到第几个代表某个属性的内容等等),得到相应的信息后系统自动生成一个实例,然后分别去设置每个属性,最后以Object对象返回。大概就是这样吧。

------解决方案--------------------
ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。 

ObjectOutputStream 和 ObjectInputStream 分别与 FileOutputStream 和 FileInputStream 一起使用时,可以为应用程序提供对对象图形的持久性存储。ObjectInputStream 用于恢复那些以前序列化的对象。其他用途包括使用套接字流在主机之间传递对象,或者用于编组和解组远程通信系统中的实参和形参。 

ObjectInputStream 确保从流创建的图形中所有对象的类型与 Java 虚拟机中的显示的类相匹配。使用标准机制按需加载类。


例子:
readObject是从ObjectIputStream中读取对象。

try {
// resouces : vector instance and test.txt file
Vector vec = new Vector();
vec.add("a");
vec.add("b");
vec.add("c");
File file = new File("d:\\1.txt");
if (file.exists()) {
file.delete();
}

// write vector instance to test.txt
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(vec);

// read vector instance from test.txt
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
System.out.println((Vector) ois.readObject());
} catch (Exception e) {
e.printStackTrace();
}
------解决方案--------------------
是序列化和反序列化的过程。