如何正确关闭套接字及其 InputStream?
How to properly close a socket and its InputStream?
假设我有一个连接的套接字和关联的 InputStream。完成此连接后,如何正确关闭它们(无泄漏)?
我已经在 SO 和其他地方搜索过这个问题,但我得到的答案要么模棱两可,要么相互矛盾。我应该
- 关闭套接字(仅)?
- 关闭输入流(仅)?
- 两者都关闭?
要在不泄漏任何资源的情况下清理 Socket
,请调用 close()
,然后丢弃对 Socket
的所有引用。通常,此建议对所有 Java Socket
subclass 都是有效的,包括 ServerSocket
和 SSLSocket
.
正如 documentation 所解释的那样,close()
关闭套接字的 InputStream
和 OutputStream
,因此无需对这些流执行单独的 close()
调用.
而且,仅关闭 InputStream
和 OutputStream
是不够的。
对 Socket
基础 class (old example) 的源代码的检查证明了为什么这是真的,至少对于 Android.
假设我有一个连接的套接字和关联的 InputStream。完成此连接后,如何正确关闭它们(无泄漏)?
我已经在 SO 和其他地方搜索过这个问题,但我得到的答案要么模棱两可,要么相互矛盾。我应该
- 关闭套接字(仅)?
- 关闭输入流(仅)?
- 两者都关闭?
要在不泄漏任何资源的情况下清理 Socket
,请调用 close()
,然后丢弃对 Socket
的所有引用。通常,此建议对所有 Java Socket
subclass 都是有效的,包括 ServerSocket
和 SSLSocket
.
正如 documentation 所解释的那样,close()
关闭套接字的 InputStream
和 OutputStream
,因此无需对这些流执行单独的 close()
调用.
而且,仅关闭 InputStream
和 OutputStream
是不够的。
对 Socket
基础 class (old example) 的源代码的检查证明了为什么这是真的,至少对于 Android.