2012-03-24 5 views
5

Есть ли способ разместить BufferedReader в String одним выстрелом, а не по строкам? Вот то, что я до сих пор:Как вы помещаете содержимое BufferedReader в строку?

  BufferedReader reader = null; 
      try 
      { 
       reader = read(filepath); 
      } 
      catch (Exception e) 
      { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
       String line = null; 
       String feed = null; 
       try 
       { 
        line = reader.readLine(); 
       } 
       catch (IOException e) 
       { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 


       while (line != null) 
       { 
        //System.out.println(line); 
        try 
        { 
         line = reader.readLine(); 
         feed += line; 
        } 
        catch (IOException e) 
        { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 
     System.out.println(feed); 

ответ

1

Если вы знаете длину вашего входа (или верхнюю границу к нему), вы можете прочитать все это в массив символов, используя read(char[],int,int), а затем использовать его для создания строка. Неважно, ваш третий параметр (len) больше размера, метод вернет количество прочитанных символов.

+0

Я не буду знать, какой размер вообще, это может быть любой размер действительно .. спасибо за ответ в любом случае .. – BigBug

+1

Это на самом деле лучшее решение без использования других библиотек. Из API: «Если« first read »в базовом потоке возвращает -1, чтобы указать конец файла, этот метод« возвращает -1 ». В противном случае этот метод возвращает количество фактически прочитанных символов». Вот как вы его используете: http://pastebin.com/RvGwKLuC – bezmax

+0

Чтобы немного объяснить: BufferedReader обертывает вокруг другого читателя. Когда вы вызываете 'read (char [], int, int)' он заполняет свой буфер последовательными вызовами 'read(): int' базового читателя. Когда внутренний буфер заполнен - ​​он получает часть его и вставляет в данный массив. Таким образом, API говорит, что если FIRST из этих базовых вызовов чтения возвращает '-1', то этот метод также возвращает' -1', поскольку он является концом потока. В противном случае (например, если 1 вызов чтения преуспел, а второй - '-1') - он все равно вернет число символов, которые были прочитаны. – bezmax

5

Использование в StringBuilder и read(char[], int, int) методы будут выглядеть следующим образом, и это, вероятно, самый оптимальный способ сделать это в Java:

final MAX_BUFFER_SIZE = 256; //Maximal size of the buffer 

//StringBuilder is much better in performance when building Strings than using a simple String concatination 
StringBuilder result = new StringBuilder(); 
//A new char buffer to store partial data 
char[] buffer = new char[MAX_BUFFER_SIZE]; 
//Variable holding number of characters that were read in one iteration 
int readChars; 
//Read maximal amount of characters avialable in the stream to our buffer, and if bytes read were >0 - append the result to StringBuilder. 
while ((readChars = stream.read(buffer, 0, MAX_BUFFER_SIZE)) > 0) { 
    result.append(buffer, 0, readChars); 
} 
//Convert StringBuilder to String 
return result.toString(); 
Смежные вопросы