eofexceptionjava出现异常Exception in thread "main" java.io.EOFException

eofexception  时间:2021-09-02  阅读:()

下述代码为何会抛出java.io.EOFException异常,哪位高手指点一下,怎样消除异常?

//要调整文件读写指针的位置到文件的开始 //已为你改好 import java.io.FileNotFoundException; import java.io.IOException; import essFile; public class essFileDemo9 { public static void main(String[] args) throws IOException { essFile raf = new essFile("b.txt","rw"); raf.writeDouble(1.00); raf.seek(0); double d = raf.readDouble(); System.out.println(d); raf.close(); } }

服务器端抛出EOFException异常

ClientAbortException: .SocketException: Broken pipe 我在网上google了一下,可是没什么收获,知道可能是由以下原因一起的: 1.Tomcat服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉 2.由于处理http连接时,正在输出内容时,用户关闭了IE,会出现一个"ClientAbortException",属于I/O处理中出现的一个异常,应用服务器应该会捕捉 根据一些实际的情况我们排除了第一个原因: 在此之前做过性能测试,服务器可以在同一秒承受至少1500个连接不会DOWN掉,而且我们的服务器有2台,而同时在线的用户量只有1800左右,每台服务器最多带900个用户,而且同时在线的用户也不可能同一时间发起请求,所以第一个原因应该不存在 至于第二个原因我们的客户端是应用程序而不是网页,所以一般不会出现在发起请求时用户就把界面关了,而且这种异常很平凡的出现,我想没有哪个用户会这么无聊的发起请求就把界面关掉。

java出现异常Exception in thread "main" java.io.EOFException

/*? ????本人也在学习java,关于这个问题查了半天资料,大概了解了怎么回事。

整理一下思路,如下: ????ObjectInputStream和ObjectOutputStream类可以对对象进行读取操作,ObjectOutputStream要求写入的对象必须实现Serialiable接口(可序列化),而ObjectInputStream对以前使用?ObjectOutputStream?写入的基本数据和对象进行反序列化。

写入就不说了,在读取的时候使用readObject()方法。

? ????方法签名:public?final?Object?readObject()throws?IOException,ClassNotFoundException?描述:当?InputStream?中出现问题或者遇到不应反序列化的类时,将抛出异常。

所有异常对于?InputStream?而言都是致命的,将使其处于不确定状态;是忽略还是恢复流状态取决于调用者。

抛出ClassNotFoundException,InvalidClassException,StreamCorruptedException,OptionalDataException和IOExcepiton(更具体的可以查看api文档),那EOFExcepiton从哪里来的呢,找了下源码,readObject--》readObject0--》peekByte,顺便摘一下带代码:(这里说的是EOFException,不关心可以直接跳过)*/ ?byte?peekByte()?throws?IOException?{ ????????????int?val?=?peek(); ????????????if?(val?<?0)?{ ????????????????throw?new?EOFException(); ????????????} ????????????return?(byte)?val; ????????}? /* ????程序到此抛出了到达文件末尾异常(EOFException),也就是说流已经达到末尾了,而你试图继续进行readObject操作。

在本题中就是while(obj!=null),readObject方法的返回值是object,当并没有说明达到结尾时的返回值是null(也就是说不能以obj!=null来判断后续是否还有对象),那该怎么办呢? ????最初,想到了本类中的available()方法,即用while(dis.available()>0)来作为条件,结果一样报EOFException,测试后才发现dis.available()方法的返回值始终为0,原来对于用ObjectOutputStream写入的文件就是如此,(available()方法中也有说明:Returns?the?number?of?bytes?that?can?be?read?without?blocking.注意要without?blocking)。

那怎么办?上网查了查了下资料,有三种方法可以解决这个问题: ????1,使用容器类来存储对象,如List,StringBuffered等,一次写入和读取,添加修改对象通过容器类。

????2,在文件中写入个额外的变量,如int?length?用于记录存了多少个对象进入,通过while(length>0)进行判断,但是在对文件中的对象进行增删操作时要同时修改length。

????3,通过捕获EOFExceptin来判断已经达到了文件的末尾(思路很巧妙)。

?? 以下是你的代码,只有while()处有点改动,后面还添了个catch(EOFException?e)块,其他都没变(类School和Student2是我自己根据你的代码添加了,可能和你的不一样)。

运行结果: Student2?[name=zhangsa,?id=30] Student2?[name=mnc,?id=30] 已经达到文件末尾?? */??? ??import?java.io.EOFException; import?java.io.File; import?java.io.FileInputStream; import?java.io.FileOutputStream; import?java.io.IOException; import?java.io.ObjectInputStream; import?java.io.ObjectOutputStream; import?essFile; import?java.io.Serializable; import?java.util.ArrayList; import?java.util.Iterator; import?java.util.List; class?School{ ?private?String?name; ?public?List<Student2>?list; ?public?School(String?name)?{ ??this.name?=?name; ?} ?public??List<Student2>?getAllStudents()?{ ??if(list?==?null) ???list?=?new?ArrayList<Student2>(); ??return?list; ?} } class?Student2?implements?Serializable{ ?/** ??*? ??*/ ?private?static?final?long?serialVersionUID?=?1L; ?private?String?name; ?private?int?id; ?public?Student2(String?name,?int?id)?{ ??this.name?=?name; ??this.id?=?id; ?} ?@Override ?public?String?toString()?{ ??return?"Student2?[name="?+?name?+?",?id="?+?id?+?"]"; ?} } public?class?Test01?{ ?public?static?void?main(String?args[])?throws?Exception{ ??File?f=new?File("d:"+File.separator+"test2.txt");?? //??essFile?rdf=new?essFile(f,"rw");???? ??School?sch?=?new?School("西南大学");??? ??Student2?s1=new?Student2("zhangsa",30);???? ??Student2?s2=new?Student2("mnc",30);?????? ??sch.getAllStudents().add(s1);????? ??sch.getAllStudents().add(s2);?? ??Iterator<Student2>?iter=sch.getAllStudents().iterator();??????? ??ObjectOutputStream?oos=?null?;???????? ??oos?=?new?ObjectOutputStream(new?FileOutputStream(f))?; ??while(iter.hasNext()) ??{ ???Student2?a5=iter.next(); ???oos.writeObject(a5)?;? ??}?? ??Object?obj?=?null?;?//?接收读取的内容??? ??ObjectInputStream?ois?=null;??? ??try{?? ???ois?=?new?ObjectInputStream(new?FileInputStream(f))?;?//?实例化对象输入流??? ???while(true)//直接用while(true),让读取操作一直进行 ???{??? ????obj?=?ois.readObject();?//循环下面的数据??? ????System.out.println(obj);??? ???}???? ??}catch(EOFException?e){??//此处捕获EOFException? ???System.out.println("已经达到文件末尾"); ??}catch(IOException?e){ ???e.printStackTrace(); ??} ??finally{?? ????if(ois!=null) ????{? ?????ois.close()?;?//?关闭??? ????}?? ????if(oos!=null) ?????oos.close(); ??} ?}? }

ZJI:韩国BGP+CN2线路服务器,国内三网访问速度优秀,8折优惠码每月实付440元起

zji怎么样?zji最近新上韩国BGP+CN2线路服务器,国内三网访问速度优秀,适用8折优惠码zji,优惠后韩国服务器最低每月440元起。zji主机支持安装Linux或者Windows操作系统,会员中心集成电源管理功能,8折优惠码为终身折扣,续费同价,全场适用。ZJI是原Wordpress圈知名主机商:维翔主机,成立于2011年,2018年9月启用新域名ZJI,提供中国香港、台湾、日本、美国独立服...

RackNerd :美国大硬盘服务器促销/洛杉矶multacom数据中心/双路e5-2640v2/64G内存/256G SSD+160T SAS/$389/月

大硬盘服务器、存储服务器、Chia矿机。RackNerd,2019年末成立的商家,主要提供各类KVM VPS主机、独立服务器和站群服务器等。当前RackNerd正在促销旗下几款美国大硬盘服务器,位于洛杉矶multacom数据中心,亚洲优化线路,非常适合存储、数据备份等应用场景,双路e5-2640v2,64G内存,56G SSD系统盘,160T SAS数据盘,流量是每月200T,1Gbps带宽,配5...

菠萝云:带宽广州移动大带宽云广州云:广州移动8折优惠,月付39元

菠萝云国人商家,今天分享一下菠萝云的广州移动机房的套餐,广州移动机房分为NAT套餐和VDS套餐,NAT就是只给端口,共享IP,VDS有自己的独立IP,可做站,商家给的带宽起步为200M,最高给到800M,目前有一个8折的优惠,另外VDS有一个下单立减100元的活动,有需要的朋友可以看看。菠萝云优惠套餐:广州移动NAT套餐,开放100个TCP+UDP固定端口,共享IP,8折优惠码:gzydnat-8...

eofexception为你推荐
软件详细设计说明书软件产品规格说明书都包含什么内容soap是什么意思捡肥皂是什么意思啊?无恶意,就好奇黑屏操作电脑黑屏,什么都操作不了黑屏操作电脑在黑屏的情况怎么重新操作系统里程碑2摩托罗拉里程碑2怎么样gps简介GPS有哪些功能趋势防毒趋势杀毒软件如何?clamp官网天子官网,天子OL官网网络连接受限制网络连接受限制怎么办!街旁appiOS平台上的App有哪些?请列举一下
vps 美国vps推荐 西安电信测速 唯品秀 edis 抢票工具 好看的桌面背景图片 地址大全 河南移动邮件系统 北京双线机房 softbank邮箱 免费cdn metalink 789电视剧 双12 四川电信商城 万网空间管理 路由跟踪 上海电信测速 1美元 更多