Closing BufferedReader and InputStreamReader

后端 未结 2 1094
北恋
北恋 2020-12-11 02:04

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 chang

相关标签:
2条回答
  • 2020-12-11 02:59

    The code isn't pretty but won't be creating a memory leak. I suggest you use a memory profiler to determine where your memory is being used. Otherwise you are just guessing even if you have ten + years experience performance tuning in Java ;)

    A better alternative is to use Java 7

    URL url = new URL(sMyUrl);
    try(BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()))) {
      while ((str = in.readLine()) != null) {
         jsonString.append(str).append("\n");
      }
    }
    

    If you have Java 6 or older you can use.

    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()))) {
    try {
      while ((str = in.readLine()) != null) {
         jsonString.append(str).append("\n");
      }
    } finally {
      in.close();
    }
    
    0 讨论(0)
  • 2020-12-11 03:05

    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);
    }
    
    0 讨论(0)
提交回复
热议问题