缓冲读者和字符串生成器如何工作?

时间:2015-09-01 17:16:22

标签: java android

我正在使用此代码来读取文件:

try {
    InputStreamReader inputStreamReader = new  InputStreamReader(openFileInput(TEXTFILE));
    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
    StringBuilder stringbuilder = new StringBuilder();
    String string=bufferedReader.readLine();
    while (string!=null){
        stringbuilder.append(string);
        string=bufferedReader.readLine();
    }
    EditText.setText(stringbuilder.toString());
} catch (Exception e) {
    e.printStackTrace();
}

为什么需要在stringbuilder中使用while?

2 个答案:

答案 0 :(得分:0)

我明白了。 使用bufferedReader.readLine();时,readLine()读取bufferedReader对象中的第一个“可用”行,然后该行变为不可用。 因此,下次使用readLine()时,它将读取下一行。

所以我们使用while让它继续阅读,直到没有可用的行。

使用StringBuilder,我们可以将这些行“追加”到一个字符串中。

答案 1 :(得分:0)

当你必须构建一个字符串时,你应该自动使用StringBuilder。这在资源节约方面更好。因为连接会创建一个新的String实例来存储结果。例如SResult = S1 + S2。所以sResult是一个新字符串。

当使用“字符串”构建器时,您将创建一个String结果的单个实例。因此,就创建的实例而言,您有s1+s2+s3+...+sN+sResult个实例,而不是将新实例乘以您连接的次数。

使用BufferedReader,您将迭代文件的行。 readline();调用只会返回下一行进行读取,直到BufferedReader到达文件末尾。假设方法readLine();将会读取,直到下一个换行符'\n'更准确。

MSDN一行被定义为一个字符序列,后跟一个换行符(“\ n”),一个回车符(“\ r”),或一个回车符后面紧跟换行符号(“\ r \ nn “)。返回的字符串不包含终止回车符或换行符。如果到达输入流的末尾,则返回的值为null。

自Java 7起,您必须使用try-with-resource来操作流。因为在您的情况下,您最后不会关闭它。这不是正确的方法。您的方式在您的操作系统导航器访问文件时提供了问题,例如,即使您关闭了Java应用程序。如果文件未关闭,您的文件仍可以打开,因此try-with-resource block可以为您完成工作。 请参阅:try-with-resource