缓冲读卡器关闭后,输入流是否也应关闭?

时间:2015-09-28 07:04:38

标签: java iostream

在解析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();
               }
            }
        }

这里我只关闭缓冲的阅读器。 这样就够了,或者我也应该关闭输入流?

1 个答案:

答案 0 :(得分: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:

  

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