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

ReliableSite:美国服务器租用,洛杉矶/纽约/迈阿密等机房;E3-1240V6/64GB/1TSSD,$95/月

reliablesite怎么样?reliablesite是一家于2006年成立的老牌美国主机商,主要提供独服,数据中心有迈阿密、纽约、洛杉矶等,均免费提供20Gbps DDoS防护,150TB月流量,1Gbps带宽。月付19美金可升级为10Gbps带宽。洛杉矶/纽约/迈阿密等机房,E3-1240V6/64GB内存/1TB SSD硬盘/DDOS/150TB流量/1Gbps带宽/DDOS,$95/月,...

创梦云 香港沙田、长沙联通2核1G仅需29元一个月 挂机宝7元一个月

商家介绍:创梦云是来自国内的主机销售商,成立于2018年4月30日,创梦云前期主要从事免备案虚拟主机产品销售,现在将提供5元挂机宝、特惠挂机宝、香港云服务器、美国云服务器、低价挂机宝等产品销售。主打高性价比高稳定性挂机宝、香港云服务器、美国云服务器、香港虚拟主机、美国虚拟主机。官方网站:http://cmy0.vnetdns.com本次促销产品:地区CPU内存硬盘带宽价格购买地址香港特价云服务器1...

简单测评melbicom俄罗斯莫斯科数据中心的VPS,三网CN2回国,电信双程cn2

melbicom从2015年就开始运作了,在国内也是有一定的粉丝群,站长最早是从2017年开始介绍melbicom。上一次测评melbicom是在2018年,由于期间有不少人持续关注这个品牌,而且站长貌似也听说过路由什么的有变动的迹象。为此,今天重新对莫斯科数据中心的VPS进行一次简单测评,数据仅供参考。官方网站: https://melbicom.net比特币、信用卡、PayPal、支付宝、银联...

eofexception为你推荐
光标跟随QQ输入法5.4最新版怎样设置光标跟随win10发布win10发布者不受信任怎么办 win10如何取消阻止该发布者站内搜索引擎搜索引擎工作原理与如何建立站内搜索快照优化如何优化百度快照t320华为T320怎么样硬盘分区格式化怎样给硬盘分区并格式化sg什么意思篮球中 SF PF SG PG各是什么位置阿主板说明书主板各个接口,插口的详细说明修复网络lspwin 7,lsp修复无法上网超市商品价格为什么超市的商品价格比便利店便宜
新加坡主机 荷兰服务器 php主机 174.127.195.202 个人空间申请 上海域名 域名转向 softbank邮箱 cdn联盟 网站卫士 什么是服务器托管 hkt 空间首页登陆 网页加速 买空间网 windowsserver2012 alertpay 装修瓦工招聘 xendesktop linuxweb服务器 更多