【发布时间】:2012-10-08 09:14:21
【问题描述】:
我正在浏览一些关于 Java IO 的文档,只是想确定我是否正确:
无缓冲输入流:FileInputStream、InputStreamReader、FileReader
无缓冲输出流:FileOutputStream、OutputStreamWriter、FileWriter
缓冲输出流:PrintStream、PrintWriter
此外,我们还有 BufferedInputStream、BufferedOutputStream、BufferedReader 和 BufferedWriter 流来将无缓冲的流转换为有缓冲的版本。
最后,我观察到对于字符流,即。 InputStreamReader、FileReader、OutputStreamWriter、FileWriter,在将字节发送到流中之前,会为字节维护一个内部字节缓冲区。这个字节缓冲区不在我们的控制之下。因此,对于字符流来说,缓冲是指用于存储进出程序的字符的高级字符缓冲区。
我说的都对吗?
附: - 我知道这个缓冲问题在一定程度上取决于实现,但我只想确认 javadocs 所说的内容
【问题讨论】:
-
这听起来或多或少是对的,但您应该依赖它在 Javadoc 中所说的内容,而不是其他任何人所说的内容。实现有义务按照它在 Javadoc 中所说的去做。您遗漏了
ObjectOutputStream,,它既是缓冲的又不是缓冲的,这取决于它到底在做什么。您还省略了过滤器流和阅读器。 -
我喜欢这个问题。没有问题要解决,只是寻求理解。这令人耳目一新。
-
我同意文档不清楚究竟缓冲了什么,例如for
OutputStreamWriter。 -
@EJP:只需确认列表的其余部分:PushBackInputStream 和 PushBackReader 显然已缓冲。但是,我无法确定 LineNumberInputStream、DataInputStream 和 DataOutputStream、FilterInputStream 和 FilterOutputStream 是否被缓冲。此外,我发现奇怪的是 Buffered(Input/Output)Stream 是 Filter(Input/Output)Stream 的子类。但是,对于 Buffered(Reader/Writer),它不是 Filter(Reader/Writer) 的子类,而是直接扩展 (Reader/Writer)。我期待这里有一个类比。
-
@EJP:最后,在 ObjectOutputStream 的情况下,您所说的“是否都被缓冲,取决于它到底在做什么”是什么意思?另外,ObjectInputStream 呢?很抱歉给您带来不便。