Java中的缓冲和无缓冲流

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

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

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

缓冲输出流 :PrintStream,PrintWriter

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

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

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

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

经验法则:

  1. 任何直接从外部源(FileInputStream,SocketInputStream等)读取的InputStream / Reader都是“原始”并被视为无缓冲。 (虽然实际上,可能会有一些缓冲,取决于实现)

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

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

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