Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果在Java中关闭套接字,是否需要关闭流?_Java_Sockets_Networking_Stream - Fatal编程技术网

如果在Java中关闭套接字,是否需要关闭流?

如果在Java中关闭套接字,是否需要关闭流?,java,sockets,networking,stream,Java,Sockets,Networking,Stream,我听说调用“socket.close()”会自动关闭它的流 将: public void close() { try { socket.close(); }catch(IOException e) { } } 具有与以下相同的效果: public void close() { try { outputstream.close(); inputstream.close(); socket

我听说调用“socket.close()”会自动关闭它的流

将:

public void close() {
     try {
          socket.close();
     }catch(IOException e) { }
}
具有与以下相同的效果:

public void close() {
     try {
          outputstream.close();
          inputstream.close();
          socket.close();
     }catch(IOException e) { }
}

如果您的目标是完全关闭套接字?

关闭套接字也将关闭套接字的
InputStream
OutputStream


您应该这样做,因为您有一个缓冲的输出流。这将刷新所有尚未发送的数据


否则,关闭套接字将关闭流,因此它是冗余的。

是,关闭输入或输出流或套接字将同时关闭流和套接字


但是,您不应该关闭套接字,您应该关闭围绕其输出流的最外层
OutputStream
Writer
,以便刷新它。只有你能做到。套接字只能关闭它的输出流,而不能关闭围绕它的内容。

哦,好的。你是说如果我使用像
ObjectOutputStream
,它不会受到
socket.close()的影响,只有socket中的流才会被关闭,对吗?那么,关闭最外层的流会关闭套接字的流吗?对于这种形式的问题(“你是这么说的”),我不会说任何类似的话
ObjectOutputStream
如果正在包装的流已关闭,则无法继续工作。关闭任何包装流都会关闭它所包装的流。请参阅FilterInputStream。