我注意到在FileWriter
中有一种方法来编写字符串:.write(String)
,而在FileReader
中只有the possibility to read into a array of char。
背后有原因吗?
答案 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中有一个返回字符串的方法,那么每次调用它时都必须创建一个新的字符串,从而导致产生大量垃圾。
此类方法的语义也不清楚:它是否应该读取尽可能多的字符而不会阻塞,就像其他读取方法一样?这可能不是很有用。它应该读取一些合理的文本单位,如一行吗?这需要缓冲,应该是另一个班级的责任。