Java 将InputStream转换为BufferedReader

Java 将InputStream转换为BufferedReader,java,android,inputstream,readline,bufferedreader,Java,Android,Inputstream,Readline,Bufferedreader,我正在尝试从Android的资产目录中使用InputStream逐行读取文本文件 我想将InputStream转换为BufferedReader,以便能够使用readLine() 我有以下代码: InputStream is; is = myContext.getAssets().open ("file.txt"); BufferedReader br = new BufferedReader (is); 第三行删除以下错误: Multiple markers at this line The

我正在尝试从Android的资产目录中使用InputStream逐行读取文本文件

我想将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.
我做错了什么?我该怎么做?谢谢

BufferedReader
无法直接包装
InputStream
。它包装了另一个
读取器
。在这种情况下,您需要执行以下操作:

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

line = file.ReadLine();
line = file.ReadLine();
...
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

BufferedReader构造函数接受参数,而不是InputStream。您应该首先从流中创建一个读卡器,如下所示:

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

您最好还向StreamReader构造函数提供一个字符集或字符编码名称。因为流只提供字节,所以将这些字节转换为文本意味着编码必须是已知的。如果不指定,则假定为系统默认值。

是的,使用InputStreamReader(由BufferedReader包装)包装InputStream是使用readLine()函数的常见“技巧”。我建议:
BufferedReader br=new BufferedReader(new InputStreamReader(是,StandardCharsets.utf8))在API级别>19时不起作用@brcolowI您的意思是说除非API级别>=19否则不工作?
Reader reader = new InputStreamReader(is);
BufferedReader br = new BufferedReader(reader);