当套接字关闭时,与套接字关联的流会自动关闭吗

  • 本文关键字:套接字 关联 java sockets stream
  • 更新时间 :
  • 英文 :


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

根据oracle文档-

You should close any streams connected to a socket before you close the
socket itself.

根据这个答案,"你必须关闭输出流,这样它就会被刷新。这会关闭套接字和输入流。关闭其中任何一个都会关闭其他两个。你根本不需要关闭输入流。严格来说,为了安全起见,你可能也应该在finally块中关闭套接字本身。"

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

yourSocket.shutdownInput();

这将套接字的输入流放置在"流的末尾"。发送到套接字的输入流端的任何数据都会得到确认,然后被静默地丢弃。您仍然可以将数据发送到输出套接字。同样,您必须关闭输出流和套接字。

类似地,请参阅shutdownOutput。

是。如果关闭Socket,的输入流或输出流,则其他两个将自动关闭。

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

相关内容

  • 没有找到相关文章