黑马程序员技术交流社区
标题:
急急急,十万火急求大神解决
[打印本页]
作者:
boboyuwu
时间:
2015-10-17 10:57
标题:
急急急,十万火急求大神解决
try {
System.out.println(3);
oos=new ObjectOutputStream(client.getOutputStream());
sperson sp=new sperson();
System.out.println(4);
sp.setName("aaaaaaaaaaaaaaaa");
oos.writeObject(sp);
oos.flush(); }
catch (IOException e) {
System.out.println("客户端错误2"+e.getMessage());}
为什么不关闭oos就会报出异常 connect reset加上这个才能正常发送出去
/* finally{
try{
if(oos!=null)
oos.close();
}
catch(IOException ex){
}}*/
作者:
rzx
时间:
2015-10-18 23:52
好 难
作者:
Coolman
时间:
2015-10-19 11:20
该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个:
第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。
另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。
作者:
daiqingming
时间:
2015-10-19 20:27
如果不调用close方法关闭,首先占用的硬件资源被浪费,其次数据可能无法像预期的那样正确输出到文件,可能出现空白文件或者数据输出不完整的情况。此外,由于文件对象未关闭,你仍然可能对它进行操作,误操作的话会给调试惹不少麻烦,也有可能成为一种不安全因素。 一般和file的读取后需要关闭一样的道理,清理缓存的作用,还有不浪费资源的作用。
作者:
徐慧shanghai
时间:
2015-10-21 09:38
首先要知道为什么要弄清几个东西
第一 ObjectOutputStream 干什么用的 ?它是将一个对象写入文件中,可能代码里并没有看到文件 但是,如果要使用这个方法 sperson sp=new sperson(); 你这个类必须实现 Serializable 接口,Serializable是什么呢?序列化接口,其实就是将一些东西暂存为文件。
然后,既然是写一个文件 ,虽然你前面flush 了,但是,程序不能确定文件就写完了,可以想象,它可能有个FileOutPutStream 类似的东西,文件流没有 close 那么也就不会去发送,所以,只有当你把文件close 了,才认为你之前的已经一切准备就绪了,那么可以把这个序列化的东西发送出去了
一些是个人猜测,但是应该是这样的
作者:
wx_xO9vSwPo
时间:
2015-10-25 11:49
oh,,,,,,,,
作者:
香港胖仔
时间:
2015-10-26 18:54
oos=new ObjectOutputStream(client.getOutputStream());
因为oos封装的是一个OutputStream对象如果不关闭则服务端就一直在等待客户端的输入
除非你写上shutDownOutput();
作者:
许佳鑫
时间:
2015-11-5 15:17
首先流用完以后关闭时避免资源浪费,你要知道java中流是一种很昂贵的资源,这个楼上都讲了。
再一个你这个贴个半拉子的程序出来让别人也不太好回答。Connection reset错误不是出在流未关闭上。
作者:
帮助信息
时间:
2015-11-9 23:46
dou都是大神 大神,,,,, 你得关掉,会浪费资源,并出错。那个flush是刷新功能。你不刷新他就一直缓存着,不会输出不会啥的 就一直运行。不过直接用一个close就行 flush不用也可以
作者:
袁有福123
时间:
2015-11-21 12:35
感觉好难啊 个人觉得应该资源用过后都要关闭吗 不然会占用空间
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2