1

现在我似乎不明白这些流(输入/输出)和普通writerreader甚至是scannerformatter...之间的区别。

以及为什么InputStream有很多子类,例如DataInputStreamandBufferedInputStream以及所有这些混乱(OutputStream当然也一样)...

最后一件事,如果缓冲区那么好(所以我读过)和高效,为什么有人会使用任何其他输入/输出方式(为什么他们甚至被制造?)

4

1 回答 1

5

Streams read / write bytes,而Readers读取和Writers写入字符数据。因为在这一切之下,在执行 I/O 时总是有字节,这意味着读取器和写入器执行了字节转换为字符的额外步骤。

这两种情况都有抽象超类(我刚刚链接的那些),还有各种子类,而不仅仅是流——您可以在 Javadoc 中自己查看,每个页面都列出了所有这些的子类。

如果您想在处理之前先收集一大块数据,则缓冲区是有意义的。一个很好的理由是,例如,如果您一次读取/写入一大块数据,而不是单独读取/写入每个字节/字符,那么磁盘访问效率会更高。但是,当然,您可能希望在许多不同的情况下进行 I/O —— 不是一种尺寸适合所有情况,因此有针对这些不同情况量身定制的不同类。

制作缓冲版本的根本原因是面向对象编程的基本原则:通过解耦功能,您可以获得不太复杂的机制/设计,同时解决更广泛的可能应用程序,如上所述。

于 2015-08-24T15:18:16.603 回答