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(); ??} ?}? }

CloudCone闪购优惠洛杉矶MC机房VPS月$1.99 便宜可随意删除重开

CloudCone商家我们很多喜欢低价便宜VPS主机的肯定是熟悉的,个人不是特别喜欢他。因为我之前测试过几次,开通的机器IP都是不通的,需要删除且开通好几次才能得到一个可用的IP地址。当然他们家的优势也是有的,就是价格确实便宜,而且还支持删除重新开通,而且机房只有一个洛杉矶MC。实话,如果他们家能多几个机房,保持现在的特点,还是有很多市场的。CloudCone是来自美国的主机销售商,成立于2017...

OneTechCloud(31元),美国CN2 GIA高防VPS月

OneTechCloud发布了本月促销信息,全场VPS主机月付9折,季付8折,优惠后香港VPS月付25.2元起,美国CN2 GIA线路高防VPS月付31.5元起。这是一家2019年成立的国人主机商,提供VPS主机和独立服务器租用,产品数据中心包括美国洛杉矶和中国香港,Cera的机器,VPS基于KVM架构,采用SSD硬盘,其中美国洛杉矶回程CN2 GIA,可选高防。下面列出部分套餐配置信息。美国CN...

搬瓦工VPS:新增荷兰机房“联通”线路的VPS,10Gbps带宽,可在美国cn2gia、日本软银、荷兰“联通”之间随意切换

搬瓦工今天正式对外开卖荷兰阿姆斯特丹机房走联通AS9929高端线路的VPS,官方标注为“NL - China Unicom Amsterdam(ENUL_9)”,三网都走联通高端网络,即使是在欧洲,国内访问也就是飞快。搬瓦工的依旧是10Gbps带宽,可以在美国cn2 gia、日本软银与荷兰AS9929之间免费切换。官方网站:https://bwh81.net优惠码:BWH3HYATVBJW,节约6...

eofexception为你推荐
重装系统后数据恢复系统重装错盘后怎么恢复数据容灾备份我想知道异地容灾备份谁知道呢,有没有好一点的?a8处理器苹果A8处理器和A9处理器有多大的区别?资源优化配置怎样实现资源的最优配置小项目想创业,二十万以内有什么好项目?什么是光纤什么是光纤网络活跃网络移动大V网是什么意思?4g上网卡4G手机上网卡和4G网络是什么意思?硬盘分区格式化硬盘分区、格式化的主要步骤工作经验介绍工作经验介绍怎么写
已备案未注册域名 提供香港vps 免费域名解析 过期已备案域名 便宜域名 正版win8.1升级win10 天猫双十一秒杀 2017年黑色星期五 域名转向 电子邮件服务器 789电视 流量计费 linux服务器维护 昆明蜗牛家 in域名 超级服务器 中国电信网络测速 免费ftp 乐视会员免费领取 广州服务器托管 更多