输入/输出流与普通读写器之间的区别是什么以及它们之间的区别是什么?

时间:2015-08-24 15:16:01

标签: java inputstream outputstream writer reader

现在,我似乎无法区分这些流(输入/输出)与普通writerreader甚至scanner和{{1}之间的区别} ...

为什么formatter有很多子类,如InputStreamDataInputStream以及所有混乱(当然BufferedInputStream也是如此)...

最后一件事,如果缓冲区那么好(所以我读)并且效率高,为什么任何人都会使用任何其他输入/输出方式(为什么他们甚至制作了?)

1 个答案:

答案 0 :(得分:5)

Streams read / write bytes ,而Readers读取,Writers字符数据。因为在它下面所有你做I / O时总是有字节,这意味着读者和作者对字符执行converting个字节的额外步骤。

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

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

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