如果在Java中关闭套接字,是否需要关闭流?
我听说调用“socket.close()”会自动关闭它的流 将:如果在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
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。