问答详情
源自:3-5 使用多线程实现多客户端的通信

关闭流的问题

if(socket != null)
   socket.close();
   既然不为空,为什么还要关闭?


提问者:L雨泽 2017-04-05 19:39

个回答

  • Navy_D
    2017-04-05 21:00:44
    已采纳

    没有上下文的代码只能猜测,强答一发。socket.close()这个方法调用是需要具体的对象的如Socket socket = new Socket(8888);如果没有对象只有引用,那么就会初始化为null,在null这个无意义的数据上是无法产生有意义的结果的。有点偏题。。。。socket如果不为空,那么一定有一个Socket对象被打开,当使用完后资源没有close就会占用资源,可能造成别的程序无法访问资源。。。但是这个if是感觉没必要的,在null上调用close是没有意义的,个人见解,欢迎指教

  • 慕少7573967
    2017-09-28 16:09:51

    当为空的关闭时会出现异常,你自己可以尝试下的。当为空的时候,代表未成功创建

  • 二月十三
    2017-04-05 21:11:52

    我的理解是socket 不为空说明有内容,当socket关闭的时候,输入输出流也会跟着关闭,借鉴学缓冲流时的缓冲输入流在关闭的时候会将所有缓冲区的数据全部写入文件,当输入输出流关闭的时候,内存中相应的数据才会得到处理?我也不知道对不对?求指教