Arg*_*nto 1 java inputstream outputstream writer reader
现在我似乎没有得到那些流(输入/输出)和普通writer和reader甚至scanner和formatter... 之间的区别.
而为何InputStream有这样大量的子类DataInputStream,并BufferedInputStream和所有的混乱(与同为OutputStream当然的)...
最后一件事,如果缓冲区是那么好(所以我读)并且效率高,为什么任何人都会使用任何其他输入/输出方式(为什么它们甚至被制作?)
流读/写 字节,而读者阅读和作家写的字符数据.因为在它下面所有你做I/O时总是有字节,这意味着读者和编写者会做一个将字节转换为字符的额外步骤.
两种情况都有抽象的超类(我刚刚链接的那些),有各种子类,不仅仅是流 - 你可以在Javadoc中自己看到,每个页面都列出了所有这些的子类.
如果您想在处理之前先收集一大块数据,缓冲区就有意义了.例如,一个很好的理由是,如果您一次读取/写入一大块数据,而不是单独读取/写入每个字节/字符,则磁盘访问会更有效.但是,当然,在许多不同的情况下,您可能希望进行I/O - 不是一种尺寸适合所有情况,因此有针对这些不同情况量身定制的不同类别.
完全缓冲版本的原因是面向对象编程的基本原则:通过解耦功能,您可以获得不太复杂的机制/设计,同时解决更广泛的可能应用,如上所述.