12

我正在浏览一些关于 Java IO 的文档,只是想确定我是否做对了:

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

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

缓冲输出流:PrintStream、PrintWriter

此外,我们还有 BufferedInputStream、BufferedOutputStream、BufferedReader 和 BufferedWriter 流来将非缓冲流转换为缓冲版本。

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

我说的一切都正确吗?

PS - 我知道这个缓冲问题在某种程度上取决于实现,但我只想确认 javadocs 所说的

4

1 回答 1

2

经验法则:

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

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

  3. 输出流/作家的相同假设。

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

于 2012-11-12T01:52:03.043 回答