反序列化时抛出java.io.EOFException异常
问题描述:在反序列化对象时,对象IO流将文件的全部类反序列化之后,始终会抛出java.io.EOFException.(想把序列化的对象一个一个拿出)
原因:java API文档中对于反序列化对象时使用的java.io.ObjectInputStream类的readObject()方法的描述有一句话是"该方法始终会抛出异常",也就是说该异常无法避免的.
案例代码
ObjectInputStream ois2 = null;
try {
ois2 = new ObjectInputStream(new FileInputStream(
new File("D:/TB_OBJECT_.txt")));
Object object = ois2.readObject();
System.out.println(object);
System.out.println("对象反序列化成功!");
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
会抛出EOFException
解决方法1:换一个思路,既然只要从头开始取,并且取一个,那我就把整个集合当一个整体去序列化,反序列化就符合条件
/**
* 序列化
*/
List<TB_OBJECT> lists = null;
try {
lists = (List<TB_OBJECT>)CommUtils.execute("SELECT ", null, JdbcMode.QUERY, TB_OBJECT.class);
System.out.println(lists);
} catch (Exception e) {
e.printStackTrace();
}
ObjectOutputStream ois = null;
try {
ois = new ObjectOutputStream(new FileOutputStream(
new File("D:/TB_OBJECT.txt"),true));
ois.writeObject(lists);
System.out.println("对象序列化成功!");
} catch (IOException e) {
e.printStackTrace();
}
/**
* 反序列化
*/
ObjectInputStream ois2 = null;
try {
ois2 = new ObjectInputStream(new FileInputStream(
new File("D:/TB_OBJECT.txt")));
List object = (List)ois2.readObject();
System.out.println(object);
System.out.println("对象反序列化成功!");
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
解决方法2 :将异常捕获
ObjectInputStream ois2 = null;
try {
ois2 = new ObjectInputStream(new FileInputStream(
new File("D:/TB_OBJECT.txt")));
while(true){
Object object = ois2.readObject();
System.out.println(object);
}
System.out.println("对象反序列化成功!");
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (EOFException e) {
e.printStackTrace();
}