【问题标题】:How to properly close a socket and its InputStream?如何正确关闭套接字及其 InputStream?
【发布时间】:2020-03-20 00:24:03
【问题描述】:

假设我有一个连接的套接字和关联的 InputStream。完成此连接后,如何正确关闭这些连接(不泄漏)?

我在 SO 和其他地方搜索过这个问题,但我得到的答案要么模棱两可,要么相互矛盾。我应该

  • 关闭套接字(仅)?
  • 关闭输入流(仅)?
  • 关闭两者?

【问题讨论】:

    标签: android sockets inputstream


    【解决方案1】:

    要清理Socket 而不泄漏任何资源,请调用close(),然后丢弃对Socket 的所有引用。一般而言,此建议对所有 Java Socket 子类有效,包括 ServerSocketSSLSocket

    正如documentation 解释的那样,close() 会关闭套接字的InputStreamOutputStream,因此无需对这些流执行单独的close() 调用。

    而且,单独关闭InputStreamOutputStream 是不够的。 对 Socket 基类 (old example) 源代码的检查证明了为什么这是正确的,至少对于 Android 而言。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-10
      • 2018-07-27
      • 2018-12-14
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 2014-04-13
      • 2012-09-25
      相关资源
      最近更新 更多