Преобразование InputStream в BufferedReader

Я пытаюсь прочитать текстовый файл построчно с помощью InputStream из каталога ресурсов в Android.

Я хочу преобразовать InputStream в BufferedReader, чтобы иметь возможность использовать readLine().

У меня есть следующий код:

InputStream is;
is = myContext.getAssets().open ("file.txt");
BufferedReader br = new BufferedReader (is);

В третьей строке сбрасывается следующая ошибка:

Multiple markers at this line
The constructor BufferedReader (InputStream) is undefinded.

То, что я пытаюсь сделать в C++, будет примерно таким:

StreamReader file;
file = File.OpenText ("file.txt");

line = file.ReadLine();
line = file.ReadLine();
...

Что я делаю не так или как мне это делать? Спасибо!

Ответ 1

BufferedReader не может напрямую обернуть InputStream. Он переносит другой Reader. В этом случае вы хотите сделать что-то вроде:

BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

Ответ 2

Конструктор BufferedReader принимает reader как аргумент, а не InputStream. Сначала вы должны создать Reader из своего потока, например:

Reader reader = new InputStreamReader(is);
BufferedReader br = new BufferedReader(reader);

Предпочтительно, вы также указываете имя кодировки или символьного кодирования для конструктора StreamReader. Поскольку поток просто предоставляет байты, преобразование их в текст означает, что кодирование должно быть известно. Если вы не укажете его, предполагается, что используется системная настройка.

Ответ 3

InputStream is;
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);