Java的BufferedReader和EnterStreamReader类之间有什么区别?

Java和类有什么区别?BufferedReaderInputStreamReader


答案 1

BufferedReader 是“InputStreamReader/FileReader”的包装器,每次调用本机 I/O 时,它都会缓冲信息。

您可以想象读取一个字符(或多个字节)与读取大号 no 的效率差异。一个转到(或字节)中的字符数。使用BufferedReader,如果您希望读取单个字符,它将存储内容以填充其缓冲区(如果它是空的),并且对于进一步的请求,字符将直接从缓冲区读取,从而实现更高的效率。

InputStreamReader 将字节流转换为字符流。它读取字节并使用指定的字符集将其解码为字符。它使用的字符集可以按名称指定,也可以显式指定,或者可以接受平台的默认字符集。

希望它有帮助。


答案 2

从主内存读取比从磁盘/STDIN 读取更快。

BufferedReader使用一种称为缓冲的技术,该技术允许我们通过将块复制到主内存来减少从磁盘/ STDIN读取的频率。

考虑:

BufferedReader in = new InputStreamReader(System.in);
in.read(); // 
in.read(); //
// ...
in.read(); // could be hitting the disk/STDIN a lot (slow!)

与:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
in.read(); //
in.read(); //
// ...
in.read(); // hitting main memory a lot (fast!)

文档中

如果没有缓冲,每次调用 都可能导致从 [disk/STDIN] 读取字节,将其转换为字符,然后返回,这可能非常低效read()

这两个类实现 相同的接口。因此,虽然您可以在不使用 的情况下使用,但它可能会导致性能不佳。我们在这里只使用装饰器模式,以便我们最终得到一个现在具有缓冲功能的模式ReaderInputStreamReaderBufferedReaderInputStreamReader


推荐