private val in = new BufferedReader(new InputStreamReader(con.getInputStream()))
private val out = new PrintWriter(con.getOutputStream(), true)
try {
while (true) {
if (in.readLine() == null)
throw new IOException("connection reset by peer")
}
} catch {
case e: Exception =>
} finally {
// Is this necessary?
in.close()
out.close()
// Close socket
con.shutdownInput()
con.shutdownOutput()
con.close()
}
Run Code Online (Sandbox Code Playgroud)
如果从套接字的输入或输出流创建任何IO流或读/写器,是否需要在套接字关闭之前或之后关闭它们?
如果从套接字的输入或输出流创建任何IO流或读/写器,是否需要在套接字关闭之前或之后关闭它们?
您应该关闭最外层OutputStream或者Writer您已从套接字输出流创建.这将刷新流并关闭套接字及其输入流.关闭套接字的任何其他方面,例如它的直接输出流,它的输入流或其周围的任何东西,或者套接字本身,完成了大部分但不是全部:特别是,在输出流之前关闭输入流在您的示例中,防止输出流被刷新,因此可能会丢失数据.
呼叫shutdownInput()或shutdownOutput()关闭前的呼叫始终是多余的.
关闭此套接字也将关闭套接字的InputStream和OutputStream.
当然,您的代码明确打开的任何读者/编写者也应该被明确地关闭,但就网络资源而言,它们将被释放,无论如何.
就行动的顺序而言,标准规则适用:最后打开 - >首先关闭.因此,在关闭底层套接字连接之前,请务必关闭所有读者/编写者.
| 归档时间: |
|
| 查看次数: |
6874 次 |
| 最近记录: |