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

Java 缓冲读取器关闭后,输入流是否也应关闭?,java,iostream,Java,Iostream,在解析JSON的一个非常常见的操作中,我们执行如下操作 StringBuilder sb = new StringBuilder(); BufferedReader br = null; try { URL requestUrl = new URL(url); URLConnection con = requestUrl.openConnection(); br = new BufferedReader(ne

在解析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();
               }
            }
        }
这里我只是关闭缓冲读取器。
这足够了吗,或者我也应该关闭输入流?

关闭
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:

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

答案如下: