Java中的缓冲和无缓冲流

Cha*_*jee 11 java io buffer stream

我正在阅读有关Java IO的一些文档,只是想确定我是否正确:

无缓冲输入流:FileInputStream,InputStreamReader,FileReader

无缓冲输出流:FileOutputStream,OutputStreamWriter,FileWriter

缓冲输出流:PrintStream,PrintWriter

此外,我们还有BufferedInputStream,BufferedOutputStream,BufferedReader和BufferedWriter流,可将无缓冲的流转换为缓冲版本.

最后,我观察到了Character Streams,即.InputStreamReader,FileReader,OutputStreamWriter,FileWriter,在将字节发送到流之前为字节维护内部字节缓冲区.这个字节缓冲区不在我们的控制之下.因此,对于Character Streams,缓冲是指用于存储进出程序的字符的高级字符缓冲区.

我说的一切都是正确的吗?

PS - 我知道这个缓冲问题在某种程度上依赖于实现,但我只是想确认一下javadocs在说什么

rom*_*afe 2

经验法则:

  1. 任何直接从外部源(FileInputStream、SocketInputStream 等)读取的 InputStream / Reader 都是“原始”的,并且被认为是无缓冲的。(尽管实际上,可能会发生一些缓冲,具体取决于实现)

  2. 任何“原始”InputStream 或 Reader 都可以由 BufferedInputStream 或 BufferedReader 进行缓冲。

  3. 对于 OuputStreams / Writers 的假设相同。

  4. 其他流装饰器(即 GZIPInputStream、MD5InputStream、YourSpecialObjectWriter)可能会做一些缓冲,但它对缓冲源的危害不是很大。