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

3C云1核1G 9.9元 4核4G 16元 美国Cera 2核4G 24元

3C云互联怎么样?3C云互联专注免备案香港美国日本韩国台湾云主机vps服务器,美国高防CN2GIA,香港CN2GIA,顶级线路优化,高端品质售后无忧!致力于对互联网云计算科技深入研发与运营的极客共同搭建而成,将云计算与网络核心技术转化为最稳定,安全,高速以及极具性价比的云服务器等产品提供给用户!专注为个人开发者用户,中小型,大型企业用户提供一站式核心网络云端服务部署,促使用户云端部署化简为零,轻松...

易探云:香港大带宽/大内存物理机服务器550元;20Mbps带宽!三网BGP线路

易探云怎么样?易探云隶属于纯乐电商旗下网络服务品牌,香港NTT Communications合作伙伴,YiTanCloud Limited旗下合作云计算品牌,数十年云计算行业经验。发展至今,我们已凝聚起港内领先的开发和运维团队,积累起4年市场服务经验,提供电话热线/在线咨询/服务单系统等多种沟通渠道,7*24不间断服务,3分钟快速响应。目前,易探云提供香港大带宽20Mbps、16G DDR3内存、...

牦牛云(3.5USD/月 )阿里云国际版云服务器 1核1G40G

收到好多消息,让我聊一下阿里云国际版本,作为一个阿里云死忠粉,之前用的服务器都是阿里云国内版的VPS主机,对于现在火热的阿里云国际版,这段时间了解了下,觉得还是有很多部分可以聊的,毕竟,实名制的服务器规则导致国际版无需实名这一特点被无限放大。以前也写过几篇综合性的阿里云国际版vps的分析,其中有一点得到很多人的认同,那句是阿里云不管国内版还是国际版的IO读写速度实在不敢恭维,相对意义上的,如果在这...

eofexception为你推荐
文件下载文件下载后怎样安装文件下载在电脑上下载文件怎么下载xhtml请问XHTML是什么东西?一般在什么情况下使用的?项目质量管理简述项目质量管理保证和项目质量控制的内容和两者区别与联系,我正在考试求大神救命软件详细设计说明书软件产品规格说明书都包含什么内容路由器映射我家被人装路由器映射有什么用快照优化快照跟不上优化节奏优化方法出问题?互动电视什么是“华数互动电视”?工作经验介绍个人工作经历简介要怎么写工作经验介绍个人简历中工作经验怎么写?
vps代购 花生壳免费域名申请 idc评测 plesk linode 512m 南昌服务器托管 ntfs格式分区 阿里校园 佛山高防服务器 hkt 服务器维护 腾讯网盘 小夜博客 优惠服务器 认证机构 在线tracert 以下 paypal兑换 内存 更多