Search code examples
javabufferedreaderinputstreamreader

Closing BufferedReader and InputStreamReader


This piece of code is creating memory leak issues cause of BufferedReader and InputStreamReader which I think might be happening cause of some exceptions. How should I change it?

try{
    URL url = new URL(sMyUrl);
    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
    while ((str = in.readLine()) != null) {
        jsonString += str;
    }
    in.close();
}catch(Exception e){

}

Solution

  • It would be safer to close your stream using a try..finally block. You might also use a StringBuilder as it is designed for concatenating strings. You should also avoid catching Exception and doing nothing with it. Also, your code is concatenating lines without any line-breaks. This may well not be what you want, in which case append("\n") when you read each line in.

    Here's a version with those modifications:

    StringBuilder json = new StringBuilder();
    try {
        URL url = new URL(sMyUrl);
        BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
        try {
            String str;
            while ((str = in.readLine()) != null) {
                json.append(str).append("\n");
            }
        } finally {
            in.close();
        }
    } catch (Exception e) {
        throw new RuntimeException("Failed to read JSON from stream", e);
    }