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

Arg*_*nto 1 java inputstream outputstream writer reader

现在我似乎没有得到那些流(输入/输出)和普通writerreader甚至scannerformatter... 之间的区别.

而为何InputStream有这样大量的子类DataInputStream,并BufferedInputStream和所有的混乱(与同为OutputStream当然的)...

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

Tho*_*mas 5

/ 字节,而读者阅读和作家的字符数据.因为在它下面所有你做I/O时总是有字节,这意味着读者和编写者会做一个字节转换为字符的额外步骤.

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

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

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