北京公司网站制作微信软文范例100字
反序列化时抛出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();}