来自 C#,我通常在与流交互时使用此模式(请注意,我在这里使用 Java 类,但我指的是 C# 中的模式):

HttpURLConnection ServiceConnection; 
DataOutputStream ConnectionStream; 
 
try { 
    ServiceConnection = (HttpURLConnection) ServiceUrl.openConnection(); 
    ConnectionStream = new DataOutputStream(ServiceConnection.getOutputStream()); 
 
    //... 
} 
finally { 
    ConnectionStream.close(); 
    ServiceConnection.Disconnect(); 
} 

根据我的理解,对于像 IOException 这样的检查异常,我需要包含一个 catch block 。很公平。所以我改变了我的代码如下:

HttpURLConnection ServiceConnection; 
DataOutputStream ConnectionStream; 
 
try { 
    ServiceConnection = (HttpURLConnection) ServiceUrl.openConnection(); 
    ConnectionStream = new DataOutputStream(ServiceConnection.getOutputStream()); 
 
    //... 
} 
catch (MalformedURLException e1) { 
    //... 
} 
catch (IOException e) { 
    //... 
} 
finally { 
    ConnectionStream.close(); 
    ServiceConnection.Disconnect(); 
} 

但是,这段代码给了我以下错误:在我尝试关闭finally block 中的流的行上出现未处理的异常:java.io.IOException。

我在这里不明白什么?我认为finally block 是你应该放置清理代码的地方,并且我认为在这里关闭流是完美的选择?

请您参考如下方法:

您可以使用 apache 的 IOUtils图书馆。它有一个名为 close 的方法,静静地。

finally { 
        IOUtils.closeQuietly(connectionStream); 
    } 

否则你必须用 try/catch 包围 close 方法

finally { 
        if (connectionStream != null) { 
            try { 
                connectionStream.close(); 
            } catch (Exception ignore) { 
                // Nothing to do 
            } 
        } 
    } 


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!