Чтение нескольких строк из InputStreamReader (JAVA) - PullRequest
3 голосов
/ 12 марта 2010

У меня есть объект InputStreamReader.Я хочу прочитать несколько строк в буфер / массив, используя один вызов функции (без создания массива строковых объектов).Есть ли простой способ сделать это?

Ответы [ 2 ]

3 голосов
/ 12 марта 2010

Прежде всего, помните, что 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() возвращает null при достижении EOF, поэтому вам следует проверить и позаботиться об этом.

0 голосов
/ 13 марта 2010

Если у вас есть разделитель для нескольких строк, вы можете прочитать это количество символов, используя метод чтения с длиной и смещением. В противном случае использование StringBuilder для добавления каждой строки, читаемой BufferedReader, должно работать хорошо, не занимая слишком много временной памяти

...