【问题标题】:BufferedReader in a loop循环中的 BufferedReader
【发布时间】:2012-10-13 14:17:03
【问题描述】:

我目前遇到了 Android 问题。在一个循环中,我从包含不断增加的 id (sensor) 的 URL 中读取。如果达到最大值,则循环结束(IOException 因为错误 500)。我的问题涉及BufferedReader。如果我指定大小(例如 8k),我不能读取超过这些 8k,尽管BufferedReader 在循环的每次运行中都会重新创建(使用不同的 uri)并且我读取的每个文件只包含一行(

如果我省略 size 参数,一切正常,但我会收到类似“使用默认缓冲区大小。最好明确...”的警告。我究竟做错了什么?这是我的代码:

sensor = 0;
while (true) {
            try {
                // adapt uri
                BufferedReader in = new BufferedReader(
                        new InputStreamReader(uri.resolve(String.valueOf(sensor))
                                .toURL().openStream()), 8*1024);

                // read from url
                s = in.readLine();
                in.close();
            } catch (IOException e) {
                break;
            }

            ... // do something with s

            sensor++;
}

【问题讨论】:

  • 这是警告,您可以忽略。
  • @Nambari:这并不能解释无法读取超过8KB(累积)的问题
  • 我不明白你说的“我不能阅读超过这些 8k”的意思
  • 我知道他不能读取超过所有迭代累积的 8K。但我觉得这很难相信。循环的每次迭代都是一个新的 BufferedReader
  • in.close()移动到finally块中:BufferedReader in = null; try { in = new BufferedReader(...); ... } catch (IOException e) { ... } finally { if (in != null) in.close(); }

标签: java android bufferedreader


【解决方案1】:

您可能需要考虑在while 循环中使用您的s = in.readLine() 调用,就像在following question 中一样。您在这里对代码所做的只是从 BufferedReader 对象中读取一次,并且您最多将获得缓冲区的大小(8k)。如果有可用的数据,后续读取将为您提供更多数据。如果readLine() 调用的结果是null,则意味着没有更多数据可供读取。

【讨论】:

  • 不,这不是我的问题。我从中读取的每个文件都只包含一行,因此一次调用就足够了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-10
  • 2015-07-13
  • 2018-05-04
  • 2013-12-21
  • 2012-03-01
相关资源
最近更新 更多