Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么没有FileReader.read(字符串),而FileWriter有write(字符串)_Java_Io_Filereader_Filewriter - Fatal编程技术网

Java 为什么没有FileReader.read(字符串),而FileWriter有write(字符串)

Java 为什么没有FileReader.read(字符串),而FileWriter有write(字符串),java,io,filereader,filewriter,Java,Io,Filereader,Filewriter,我注意到在中有一个写字符串的方法:,而在中只有 这背后有什么原因吗?如果您可以升级到BufferedReader,您会得到一个确实返回字符串的读线。如果您可以升级到BufferedReader,您会得到一个确实返回字符串的读线。字符串类是不可变的,因此不可能读入字符串。另一方面,如果您只是想读取字符串,那么问题在于您没有传达希望读取的字符串的大小。是的,可能有一个方法String readint,它表示您希望一次读取多少,但是由于从char[]到String的步骤非常简单,因此不需要第二个这样的

我注意到在中有一个写字符串的方法:,而在中只有


这背后有什么原因吗?

如果您可以升级到BufferedReader,您会得到一个确实返回字符串的读线。

如果您可以升级到BufferedReader,您会得到一个确实返回字符串的读线。

字符串类是不可变的,因此不可能读入字符串。另一方面,如果您只是想读取字符串,那么问题在于您没有传达希望读取的字符串的大小。是的,可能有一个方法String readint,它表示您希望一次读取多少,但是由于从char[]到String的步骤非常简单,因此不需要第二个这样的方法。另一方面,readchar[]是一种更通用、更高效的方法。

String类是不可变的,因此不可能读入字符串。另一方面,如果您只是想读取字符串,那么问题在于您没有传达希望读取的字符串的大小。是的,可能有一个方法String readint,它表示您希望一次读取多少,但是由于从char[]到String的步骤非常简单,因此不需要第二个这样的方法。另一方面,readchar[]是一种更通用、更高效的方法。

在FileWriter中,编写字符串很容易。然而,在FileReader中,无法读取字符串,因为它不知道何时停止。如果它读入一个char[],它就无法读取超过数组末尾的内容。如果您想一次读取一行,那么创建一个BufferedReader,它有一个方法来读取并返回一行作为字符串。如果要将特定数量的字符读入字符串,可以编写一个助手方法:

public static String read(Reader in, int n) {
    char[] chars = new char[n];
    in.read(chars);
    return new String(chars);
}
在FileWriter中,编写字符串很容易。然而,在FileReader中,无法读取字符串,因为它不知道何时停止。如果它读入一个char[],它就无法读取超过数组末尾的内容。如果您想一次读取一行,那么创建一个BufferedReader,它有一个方法来读取并返回一行作为字符串。如果要将特定数量的字符读入字符串,可以编写一个助手方法:

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

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


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

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


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

那么,读者怎么能猜出你要读的字符串有多长?@fge:它也不知道或关心你要读多少字符。它只是尽可能方便地填充数组的一部分。引用是按值传递的,字符串是不可变的,因此无法通过字符串参数返回内容。那么,读者如何猜测您要读取的字符串长度呢?@fge:它也不知道或关心您要读取的字符数。它只是尽可能方便地填充数组的一部分。引用是按值传递的,字符串是不可变的,因此无法通过字符串参数返回内容。不确定这是否是一个好参数。char[]也不会告诉方法何时停止。当然,它的读取量不会超过数组的大小,但它也可以自由地减少读取量。是的,如果它达到EOF。在查看API文档后,答案是肯定的。它也会在I/O错误时停止。代码应该使用返回值来检查读取了多少个字符。请查看readchar[]的文档,您必须阅读一组不同的API文档。将字符读入数组。此方法将阻塞,直到某些输入可用、发生I/O错误或到达流的结尾。它可以自由地返回一些输入。可以是单个字符。不确定这是否是一个好的论点。char[]也不告诉t
他决定什么时候停下来。当然,它的读取量不会超过数组的大小,但它也可以自由地减少读取量。是的,如果它达到EOF。在查看API文档后,答案是肯定的。它也会在I/O错误时停止。代码应该使用返回值来检查读取了多少个字符。请查看readchar[]的文档,您必须阅读一组不同的API文档。将字符读入数组。此方法将阻塞,直到某些输入可用、发生I/O错误或到达流的结尾。它可以自由地返回一些输入。可以是单个字符。