2016-10-25 3 views
1

Мне требуется из-за предыдущей реализации использовать InputStream, я не могу использовать BufferedReader.Прочитайте строку файла с использованием InputStream

Мой испытательный стенд использовали BufferedReader и время цикла, например, так:

while ((line = br.readLine()) != null) 

Однако уш теперь требуется, чтобы быть InputStream (и будет переименован). Есть ли способ чтения таким образом с помощью InputStream, или мне нужно читать его байты за раз и искать \n?

+0

Восхитительный дубликат o f http://stackoverflow.com/questions/309424/read-convert-an-inputstream-to-a-string –

ответ

4

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

// assuming that you have an InputStream named inputStream 
try (BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))) { 
    String line = null; 
    while((line = br.readLine()) != null) { 
     // use line here 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Или же, оберните InputStream в объекте Scanner:

try (Scanner scanner = new Scanner(inputStream)) { 
    while (scanner.hasNextLine()) { 
     String line = scanner.nextLine(); 
     // use line here 
    } 
} 
1

Вы можете изменить код, как этот:

public String readLine(InputStream inputStream) throws IOException { 

     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     int r; 

     for (r = inputStream.read(); r != '\n' && r != -1 ; r = inputStream.read()) { 
      baos.write(r); 
     } 

     if (r == -1 && baos.size() == 0) { 
      return null; 
     } 

     String lines = baos.toString("UTF-8"); 
     return lines; 
     } 

Может быть, этот пример поможет вам ..