【发布时间】:2020-03-20 00:24:03
【问题描述】:
假设我有一个连接的套接字和关联的 InputStream。完成此连接后,如何正确关闭这些连接(不泄漏)?
我在 SO 和其他地方搜索过这个问题,但我得到的答案要么模棱两可,要么相互矛盾。我应该
- 关闭套接字(仅)?
- 关闭输入流(仅)?
- 关闭两者?
【问题讨论】:
标签: android sockets inputstream
假设我有一个连接的套接字和关联的 InputStream。完成此连接后,如何正确关闭这些连接(不泄漏)?
我在 SO 和其他地方搜索过这个问题,但我得到的答案要么模棱两可,要么相互矛盾。我应该
【问题讨论】:
标签: android sockets inputstream
要清理Socket 而不泄漏任何资源,请调用close(),然后丢弃对Socket 的所有引用。一般而言,此建议对所有 Java Socket 子类有效,包括 ServerSocket 和 SSLSocket。
正如documentation 解释的那样,close() 会关闭套接字的InputStream 和OutputStream,因此无需对这些流执行单独的close() 调用。
而且,单独关闭InputStream 和OutputStream 是不够的。
对 Socket 基类 (old example) 源代码的检查证明了为什么这是正确的,至少对于 Android 而言。
【讨论】: