我知道FileReaderFileWriter一对一地读写字符。因此,我应该每次都进行系统调用。

但是我的问题是,它是否在内部使用缓冲区来优化IO性能?

否则,读取像这样的字符数组,

public int read(char[] cbuf, int offset, int length)


对于每个要读取的字符,将需要系统调用。

或者像这样写一部分String,

public void write(String str, int off,int len)


会很重吗?

最佳答案

FileReaderFileWriterInputStreamReaderOutputStreamWriter派生。这些实现确实在内部使用缓冲区来提高字节和字符之间的转换效率,例如OpenJDK使用8kB缓冲区(请参见StreamDecoderStreamEncoder类)。 API规范虽然不能为您提供任何保证,但建议您使用BufferedReaderBufferedWriter来提高IO性能。

10-07 17:01