Java Socket|IO流关闭|shutdownInput|shutdownOutput

这里直接给出结论,因为没有什么道理可讲,编码的时候不要写触犯这些规则的代码即可,

OutputStream os = socket.getOutputStream();
os.close();
InputStream is = socket.getInputStream();
is.close();

类似这种关闭流的操作会导致Socket关闭,所以后续如果有对Socket的操作,都会抛出

java.net.SocketException: Socket is closed

的异常。所以基本上你是没有理由去调用输入输出流的close()方法的,除了在最后清理的时候,另外我们知道在调用读取方法时,多数是阻塞的,所以你的程序必须要考虑到这一点,要防止对方长时间没有调用shutdownOutput()或其他结束输出的方法时,你的线程出现一直读取阻塞的情形,像是线程假死一样,当然,如果你清楚的知道你的程序在做什么,这也无妨。

你可能感兴趣的:(Java,IO编程)