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_Stream - Fatal编程技术网

Java 当套接字关闭时,与套接字关联的流是否会自动关闭?

Java 当套接字关闭时,与套接字关联的流是否会自动关闭?,java,sockets,stream,Java,Sockets,Stream,我使用Java套接字(TCP)与服务器通信。 我的问题是,当套接字关闭时,与套接字关联的输入和输出流是否会自动关闭?这样做安全吗?根据- 根据“您必须关闭输出流,因此它会被刷新。这会关闭套接字和输入流。关闭其中任何一个都会关闭其他两个。您根本不需要关闭输入流。严格地说,为了安全起见,您可能还应该在finally块中关闭套接字本身。” 您可以显式停止inputStream中的传入数据,如下所示 yourSocket.shutdownInput(); 这将套接字的输入流置于“流的末尾”。发送到套接

我使用Java套接字(TCP)与服务器通信。 我的问题是,当套接字关闭时,与套接字关联的输入和输出流是否会自动关闭?这样做安全吗?

根据-

根据“您必须关闭输出流,因此它会被刷新。这会关闭套接字和输入流。关闭其中任何一个都会关闭其他两个。您根本不需要关闭输入流。严格地说,为了安全起见,您可能还应该在finally块中关闭套接字本身。”

您可以显式停止inputStream中的传入数据,如下所示

yourSocket.shutdownInput();
这将套接字的输入流置于“流的末尾”。发送到套接字的输入流端的任何数据都将被确认,然后以静默方式丢弃。您仍然可以将数据发送到输出套接字。同样,您必须关闭输出流和套接字


类似地,请参见。

是。如果关闭
套接字、
其输入流或输出流,则其他两个将自动关闭


话虽如此,作为一种良好的实践,您应该始终关闭围绕套接字的最外面的输出流或编写器,并可能在finally块中关闭套接字本身。这样可以确保最终输出被刷新。如果您使用的是缓冲输出流或写入程序,而您不这样做,则会丢失缓冲区中的数据。

感谢您的支持answer@EJP阿克。只是想快点回答。我诚挚的道歉。(1)你应该承认你的消息来源。您已编辑了问题,但仍未提供正确的归因。(2) 关闭套接字进行输入不会关闭输入流。它仍然开放供阅读。否决票仍然存在。标记为剽窃。“发送到套接字输入端的任何数据都会被确认,然后被默默地丢弃。”否。这取决于平台。BSD就是这样的。Linux不会丢弃数据,因此发送方最终会阻止。Windows错误地发送重置。downpoite仍然存在。@EJP这就是java文档所说的感谢您的建议。我会像那样合上插座。
yourSocket.shutdownInput();