【问题标题】:Convert InputStream to BufferedReader将 InputStream 转换为 BufferedReader
【发布时间】:2011-07-09 04:22:42
【问题描述】:

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

我想将 InputStream 转换为 BufferedReader 以便能够使用 readLine()。

我有以下代码:

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

第三行删除以下错误:

此行有多个标记
构造函数 BufferedReader (InputStream) 未定义。

我在 C++ 中尝试做的事情是这样的:

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

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

我做错了什么或者我应该怎么做?谢谢!

【问题讨论】:

    标签: java android inputstream readline bufferedreader


    【解决方案1】:

    BufferedReader 不能直接包装 InputStream。它包装了另一个Reader。在这种情况下,您需要执行以下操作:

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

    【讨论】:

    • 是的,用一个InputStreamReader包装一个InputStream,它被一个BufferedReader包装是使用readLine()函数的一个常见“技巧”。
    • 我推荐:BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8)); 在 Java 7 中添加
    • 标准字符集不适用于 API 级别 >19。 @brcolow
    • 我想你的意思是说除非 API 级别 >= 19 否则不起作用?
    【解决方案2】:

    BufferedReader 构造函数将reader 作为参数,而不是 InputStream。您应该首先从您的流中创建一个阅读器,如下所示:

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

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

    【讨论】:

      【解决方案3】:
      InputStream is;
      InputStreamReader r = new InputStreamReader(is);
      BufferedReader br = new BufferedReader(r);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-18
        • 2014-04-23
        • 2011-08-11
        • 2018-07-19
        • 1970-01-01
        • 2020-02-16
        • 2011-03-30
        • 1970-01-01
        相关资源
        最近更新 更多