反序列化过程引发了 java.io.EOFException异常怎么解决?

L0nly 2017-08-12 12:24:46
【Person类】
package cn.qf.test;

import java.io.Serializable;

public class Person implements Serializable,Comparable<Person>{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Person o) {
// TODO Auto-generated method stub
if(this.age>o.getAge()){
return 1;
}
else if(this.age<o.getAge()){
return -1;
}
return 0;
}
}
【TestTreeSet类】
package cn.qf.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class TestTreeSet {

public static void main(String[] args) throws IOException, ClassNotFoundException {
// TODO Auto-generated method stub
File file = new File("D:\\test\\object.txt");
OutputStream os = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(os);
InputStream is = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(is);
Set<Person> set = new TreeSet<>();
set.add(new Person("张三", 17));
set.add(new Person("李四", 22));
set.add(new Person("王五", 19));
set.add(new Person("赵六", 20));
set.add(new Person("田七", 15));
Iterator<Person> iterator = set.iterator();
while(iterator.hasNext()){
Person person = iterator.next();
oos.writeObject(person);
oos.flush();
System.out.println(person);
}
System.out.println("*********************************");
Person person = null;
while((person=(Person) ois.readObject() )!= null){
System.out.println(person);
}
}

}
【输出异常类型】
Person [name=田七, age=15]
Person [name=张三, age=17]
Person [name=王五, age=19]
Person [name=赵六, age=20]
Person [name=李四, age=22]
*********************************
Person [name=田七, age=15]
Person [name=张三, age=17]
Person [name=王五, age=19]
Person [name=赵六, age=20]
Person [name=李四, age=22]
Exception in thread "main" java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2626)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1321)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
at cn.qf.test.TestTreeSet.main(TestTreeSet.java:39)
...全文
527 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
L0nly 2017-08-14
  • 打赏
  • 举报
回复
大佬,你这个方法就是直接遍历Set集合了!我想从文件中边读边显示到控制台就是用到while((person=(Person) ois.readObject() )!= null) { System.out.println(person); }这段代码不行,我想知道为什么不行。对象流中的readObject()方法返回的不就是对象吗!当对象不为空是让它输出为什么错啊!
李德胜1995 2017-08-12
  • 打赏
  • 举报
回复
可以改为

oos.writeObject(set);
Set<Person> persons=(Set<Person>) ois.readObject();
然后遍历persons
或者使用try catch捕获java.io.EOFException异常。。。。

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧