【问题标题】:Should Input stream be closed too after Buffered Reader is closed? [duplicate]缓冲阅读器关闭后输入流也应该关闭吗? [复制]
【发布时间】:2015-12-25 08:42:44
【问题描述】:

在解析 JSON 的一个非常常见的操作中,我们会这样做

StringBuilder sb = new StringBuilder();
BufferedReader br = null;
        try {
            URL requestUrl = new URL(url);
            URLConnection con = requestUrl.openConnection();
            br = new BufferedReader(new InputStreamReader(con.getInputStream()));
            int cp;
            try {
                while ((cp = br.read()) != -1) {
                    sb.append((char) cp);
                }
            }
            catch(Exception e){
            }
        }catch (MalformedURLException e){
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(br != null){
               try{
                   br.close();
               }catch (IOException e){
                   e.printStackTrace();
               }
            }
        }

这里我只是关闭缓冲阅读器。 这够了吗,还是我也应该关闭输入流?

【问题讨论】:

标签: java iostream


【解决方案1】:

关闭BufferedReader就够了。

如果您查看BufferedReader.close() 的来源,您会发现它关闭了底层阅读器:

public void close() throws IOException {
    synchronized (lock) {
        if (in == null)
            return;
        try {
            in.close();
        } finally {
            in = null;
            cb = null;
        }
    }
}

来自Reader.close()的javadocs:

关闭流并释放与之关联的所有系统资源。

【讨论】:

    猜你喜欢
    • 2010-12-22
    • 2012-03-11
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    相关资源
    最近更新 更多