我正在浏览一些关于Java IO的文档,只是想确定我是否做到了这一点:
无缓冲输入流:FileInputStream,InputStreamReader,FileReader
无缓冲输出流:FileOutputStream,OutputStreamWriter,FileWriter
缓冲输出流:PrintStream,PrintWriter
此外,我们还有BufferedInputStream,BufferedOutputStream,BufferedReader和BufferedWriter流,可将无缓冲的流转换为缓冲版本。
最后,我发现对于角色流,即。 InputStreamReader,FileReader,OutputStreamWriter,FileWriter,在将字节发送到流之前为字节维护内部字节缓冲区。这个字节缓冲区不在我们的控制之下。因此,对于Character Streams,缓冲是指用于存储进出程序的字符的高级字符缓冲区。
我所说的一切都是正确的吗?
P.S。 - 我知道这个缓冲问题在某种程度上依赖于实现,但我只是想确认一下javadocs在说什么
答案 0 :(得分:1)
经验法则:
直接从外部源(FileInputStream,SocketInputStream等)读取的任何InputStream / Reader都是“原始”并被视为无缓冲。 (虽然实际上,可能会有一些缓冲,取决于实施)
任何'原始'InputStream或Reader都可以通过BufferedInputStream或BufferedReader进行缓冲。
与OuputStreams / Writers相同的假设。
其他流装饰器(即GZIPInputStream,MD5InputStream,YourSpecialObjectWriter)可能会做一些缓冲,但它对缓冲源不是很有害。