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

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

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

盘点AoYoZhuJi傲游主机商8个数据中心常见方案及八折优惠

傲游主机商我们可能很多人并不陌生,实际上这个商家早年也就是个人主机商,传说是有几个个人投资创办的,不过能坚持到现在也算不错,毕竟有早年的用户积累正常情况上还是能延续的。如果是新服务商这几年确实不是特别容易,问到几个老牌的个人服务商很多都是早年的用户积累客户群。傲游主机目前有提供XEN和KVM架构的云服务器,不少还是亚洲CN2优化节点,目前数据中心包括中国香港、韩国、德国、荷兰和美国等多个地区的CN...

丽萨主机:美国CN2 GIA精品网/KVM/9折,美国原生IP,最低27元/月

丽萨主机怎么样?丽萨主机,团队于2017年成立。成立之初主要做的是 CDN 和域名等相关业务。最近开辟新领域,新增了独立服务器出租、VPS 等业务,为了保证业务质量从一开始就选择了中美之间的 CN2 GIA 国际精品网络,三网回程 CN2 GIA,电信去程 CN2 GIA + BGP 直连智能路由,联通移动去程直连,原生IP。适合对网络要求较高的用户,同时价格也比较亲民。点击进入:丽萨主机官方网站...

eofexception为你推荐
阿里校园招聘阿里校园招的校园CEO主要是要做什么呢?连接池什么是数据连接池?体系文件什么叫采购体系文件nvidia官方网站N卡的官网是什么?小项目奥运会一共有几个大项目小项目?0x800ccc0foutlook 2007 能接收,出现0x800ccc0f错误怎么解决?所有杀毒软件都已经关闭!!0x800ccc0f错误号: 0x800CCC0F 这个是虾米意思?售后软件电脑维修需要哪些必备软件摇一摇周边微信摇一摇周边怎么申请开通乐辞乐的组词有什么
ip反查域名 vps交流 美国独立服务器 hawkhost优惠码 ion 正版win8.1升级win10 512m内存 网通服务器ip panel1 本网站服务器在美国 idc资讯 卡巴斯基试用版 网络空间租赁 帽子云排名 免费asp空间申请 浙江服务器 国内空间 网站防护 国外免费网盘 wordpress空间 更多