關(guān)于java.io.EOFException產(chǎn)生的原因以及解決方案
java.io.EOFException產(chǎn)生的原因及解決
異常發(fā)生場景
使用ObjectInputStream類往文件中傳入自定義類student時
ObjectInputStream objectInputStream=null;
ArrayList<Student> students=null;
try {
objectInputStream = new ObjectInputStream(new FileInputStream("D:\\桌面\\java38\\javase08\\java08\\1.txt"));
students = (ArrayList<Student>) objectInputStream.readObject();
System.out.println("數(shù)據(jù)載入成功");
?
}catch (Exception e) {
e.printStackTrace();
System.out.println("數(shù)據(jù)載入失敗");
}異常產(chǎn)生原因
經(jīng)過導(dǎo)師查找,終于發(fā)現(xiàn)了OFException產(chǎn)生的原因
ObjectInputStream objectInputStream=null;
//idea上顯示null為灰色,說明 new ObjectInputStream(new FileInputStream("D:\\桌面\\java38\\javase08\\java08\\1.txt"));返回值為null,即文件"D:\\桌面\\java38\\javase08\\java08\\1.txt"為空
objectInputStream = new ObjectInputStream(new FileInputStream("D:\\桌面\\java38\\javase08\\java08\\1.txt"));objectInputStream為空值,則不能使用objectInputStream.close();如果使用會產(chǎn)生并發(fā)癥 java.lang.NullPointerException(空指針異常)
異常解決
ObjectInputStream objectInputStream=null;
ArrayList<Student> students=null;
try {
objectInputStream = new ObjectInputStream(new FileInputStream("D:\\桌面\\java38\\javase08\\java08\\1.txt"));
students = (ArrayList<Student>) objectInputStream.readObject();
System.out.println("數(shù)據(jù)載入成功");
?
} catch (EOFException e) {
students = new ArrayList<>();
?
}catch (Exception e) {
e.printStackTrace();
System.out.println("數(shù)據(jù)載入失敗");
} finally {
if(objectInputStream != null) {
objectInputStream.close();
}在finally語句內(nèi)加上判斷,不等于空值才關(guān)閉
捕獲EOFException,但不打印錯誤,為students,new一個新的集合(本來這里也有一個會出bug的地方,但是被我之前就給students賦了null值,(ArrayList<Student> students=null;)所以catch里new一個新的對象)
如果不為空,則
students = (ArrayList<Student>) objectInputStream.readObject();
正常執(zhí)行,不報(bào)錯誤~
總結(jié)
java.io.EOFException不是一個常出現(xiàn)的問題,而且并發(fā)癥 java.lang.NullPointerException(空指針異常),只有objectInputStream.readObject();接收為null且1.txt文件為空時才會出現(xiàn)
EOFException只需要捕獲,該bug在本場景下被捕獲后程序就不會終止了,甚至不處理也行。
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java使用Fastjson2處理JSON字段大小寫不一致的優(yōu)雅方案
這篇文章主要為大家詳細(xì)介紹了Java使用Fastjson2處理JSON字段大小寫不一致的優(yōu)雅方案,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-04-04
servlet實(shí)現(xiàn)簡單的權(quán)限管理和敏感詞過濾功能
JavaEE課要求用servlet和過濾器實(shí)現(xiàn)權(quán)限管理和敏感詞過濾功能,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
Java?Web實(shí)現(xiàn)簡易圖書管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java?Web實(shí)現(xiàn)簡易圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-09-09
SpringBoot詳細(xì)講解異步任務(wù)如何獲取HttpServletRequest
在使用框架日常開發(fā)中需要在controller中進(jìn)行一些異步操作減少請求時間,但是發(fā)現(xiàn)在使用@Anysc注解后會出現(xiàn)Request對象無法獲取的情況,本文就此情況給出完整的解決方案2022-04-04
SpringBoot實(shí)現(xiàn)異步調(diào)用的方法示例
本文介紹了在Java的SpringBoot中實(shí)現(xiàn)異步請求和異步調(diào)用的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01

