3

我有一个 InputStreamReader 对象。我想使用一个函数调用将多行读入缓冲区/数组(不创建大量字符串对象)。有没有一种简单的方法可以做到这一点?

4

2 回答 2

3

首先要注意InputStreamReader效率不高,您应该将其包裹在BufferedReader对象周围以获得最佳性能。

考虑到这一点,您可以执行以下操作:

public String readLines(InputStreamReader in)
{
  BufferedReader br = new BufferedReader(in);
  // you should estimate buffer size
  StringBuffer sb = new StringBuffer(5000);

  try
  {
    int linesPerRead = 100;
    for (int i = 0; i < linesPerRead; ++i)
    {
      sb.append(br.readLine());
      // placing newlines back because readLine() removes them
      sb.append('\n');
    }
  }
  catch (Exception e)
  {
    e.printStackTrace();
  }

  return sb.toString();
}

请注意已达到readLine()退货,因此您应该检查并照顾它。nullEOF

于 2010-03-12T17:49:18.323 回答
0

如果您对多行有一些分隔符,则可以使用具有长度和偏移量的读取方法读取那么多字符。否则,使用 StringBuilder 附加 BufferedReader 读取的每一行应该很适合您,而不会占用太多临时内存

于 2010-03-12T21:25:46.947 回答