当FileWriter写入(String)时,为什么没有FileReader.read(String)

时间:2013-07-28 07:32:27

标签: java io filereader filewriter

我注意到在FileWriter中有一种方法来编写字符串:.write(String),而在FileReader中只有the possibility to read into a array of char

背后有原因吗?

4 个答案:

答案 0 :(得分:4)

String类是不可变的,所以不可能“读入字符串”。另一方面,如果你的意思是String read(),那么问题在于你没有传达你想要阅读的字符串的大小。是的,可能有一个方法String read(int),可以说明您想要多长时间阅读,但由于从char[]String的步骤非常简单,因此无需第二种方法。另一方面,read(char[])是一种更通用,更有效的方法。

答案 1 :(得分:0)

如果你可以“升级”到BufferedReader,你会得到一个确实返回一个字符串的readLine

答案 2 :(得分:0)

FileWriter中,可以轻松编写String。但是,在FileReader中,无法读取String,因为它不知道何时停止。如果它读入char[],则无法读取数组的末尾。如果要一次读取一行,则创建一个BufferedReader,它有一个读取方法并将一行作为字符串返回。如果要将特定数量的字符读入字符串,可以自己编写辅助方法:

public static String read(Reader in, int n) {
    char[] chars = new char[n];
    in.read(chars);
    return new String(chars);
}

答案 3 :(得分:0)

字符串是不可变的,这是另一种说法,一旦你创建了一个字符串就无法改变它,例如重用它占用的存储空间。如果Reader中有一个返回字符串的方法,那么每次调用它时都必须创建一个新的字符串,从而导致产生大量垃圾。

此类方法的语义也不清楚:它是否应该读取尽可能多的字符而不会阻塞,就像其他读取方法一样?这可能不是很有用。它应该读取一些合理的文本单位,如一行吗?这需要缓冲,应该是另一个班级的责任。