我正在浏览Java IO上的一些文档,只是想确保我是否正确理解:
未封闭的输入流:FileInputStream,InputStreamReader,FileReader
未封闭的输出流:fileOutputstream,outputStreamWriter,filewriter
缓冲输出流:printstream,printwriter
此外,我们还有BufferedInputStream,BufferedOutputStream,BufferedReader和BufferedWriter Streams,以将未封闭的流转换为缓冲版本。
最后,我观察到,对于字符流,即。InputStreamReader,fileReader,outputStreamWriter,filewriter,在将其发送到流中之前,要为字节维护内部字节屏障。这个字节屏蔽器不在我们的控制之下。因此,对于角色流,缓冲是指用于存储字符进出程序的高级角色缓冲区。
我说的一切正确吗?
P.S。 - 我知道这个缓冲问题在某种程度上取决于实施,但我只是想确认Javadocs在说
经验法则:
-
直接从外部源(FileInputStream,socketInputStream等)读取的任何InputStream/读取器都是"原始",并且被认为没有被掩盖。(尽管实际上,可能正在进行一些缓冲,取决于实现)
-
任何" RAW" InputStream或Reader都可以通过BufferedInputStream或BufferedReader进行缓冲。
-
对Ouputstreams/Writers的假设相同。
-
其他流动装饰器(即gzipinputstream,md5inputstream,yourspecialObjectWriter)可能会进行一些缓冲,但对缓冲源的缓冲并不非常有害。