当前位置: 代码迷 >> J2SE >> ObjectInputStream 遍历读取.tmp中的类对象,该如何解决
  详细解决方案

ObjectInputStream 遍历读取.tmp中的类对象,该如何解决

热度:363   发布时间:2016-04-23 20:37:30.0
ObjectInputStream 遍历读取.tmp中的类对象
如果tmp文件中有两个类对象,如何遍历取出。目前可以分两次读出,代码如下
package com.donghe.package1;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;

public class ObjectIntputStreamDemo {
public static void main(String[] args){
ObjectInputStream ois =null;
try {
ois = new ObjectInputStream(new FileInputStream("e:\\person.tmp") );
Object ob = ois.readObject();

System.out.println(ois.read());

if (ob!= null){
Person p= (Person)ob;
System.out.println(p.getId());
System.out.println(p.getName());
System.out.println(p.getAge());
}
System.out.println(ois.read());

Object ob2 = ois.readObject();
if (ob2!= null){
Person p= (Person)ob2;
System.out.println(p.getId());
System.out.println(p.getName());
System.out.println(p.getAge());
}
System.out.println(ois.read());


} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
ois.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

------解决方案--------------------
方法之一:(常用的方法)将若干个对象(数量不定)都装入一个容器中(如:ArrayList之类),然后将容器这一个对象写入就行了。读取一个对象(即容器对象)就行了。推荐用第一种.省代码

方法之二:(若不想用容器),则由于数量不定,正是用EOFException来判断结束。代码结构如下:(无论是readInt()读int,还是readObject()读对象)
try{
  while(true)
  {
  Object o=ois.radObject();
  处理已读出的对象o;
  }
}catch(EOFxception e){
 //已从流中读完。
 }
finallly{
//流的关闭。
}