Java中的缓冲和无缓冲流 [英] Buffered and Unbuffered Streams in Java
问题描述
我正在浏览一些关于Java IO的文档,只是想确定我是否做到了这一点:
I was going through some of the documentation on Java IO and just wanted to make sure whether I get this right:
无缓冲输入流:FileInputStream,InputStreamReader,FileReader
Unbuffered Input Streams: FileInputStream, InputStreamReader, FileReader
无缓冲输出流:FileOutputStream,OutputStreamWriter,FileWriter
Unbuffered Output Streams: FileOutputStream, OutputStreamWriter, FileWriter
缓冲输出流:PrintStream,PrintWriter
Buffered Output Streams: PrintStream, PrintWriter
此外,我们还有BufferedInputStream,BufferedOutputStream,BufferedReader和BufferedWriter流来转换无缓冲的流入缓冲版本。
In addition, we have the BufferedInputStream, BufferedOutputStream, BufferedReader and BufferedWriter streams to convert the unbuffered streams into buffered versions.
最后,我发现对于角色流,即。 InputStreamReader,FileReader,OutputStreamWriter,FileWriter,在将字节发送到流之前为字节维护内部字节缓冲区。这个字节缓冲区不在我们的控制之下。因此,对于Character Streams,缓冲是指用于存储进出程序的字符的高级字符缓冲区。
Finally, I observed that for the Character Streams, viz. InputStreamReader, FileReader, OutputStreamWriter, FileWriter, an internal byte-buffer is maintained for the bytes before they are sent into the stream. This byte-buffer is not under our control. Hence, for Character Streams, buffering refers to the high-level character buffer for storing the characters coming in and going out of the program.
我所说的一切是否正确?
Is everything I said correct?
PS - 我知道这个缓冲问题在某种程度上取决于实现,但我只是想确认javadocs在说什么
P.S. - I understand that this buffering issue is somewhat implementation dependent, but I just wish to confirm what the javadocs are saying
推荐答案
规则thumb:
-
任何直接从外部源(FileInputStream,SocketInputStream等)读取的InputStream / Reader都是'raw'并认为是无缓冲的。 (虽然实际上可能会有一些缓冲,取决于实现)
Any InputStream / Reader that reads directly from an external source (FileInputStream, SocketInputStream, etc.) is 'raw' and considered unbuffered. (Though in reality, there is probably some buffering going on, depends on the implementation)
任何'原始'InputStream或Reader都可以通过BufferedInputStream缓冲或者BufferedReader。
Any 'raw' InputStream or Reader can be buffered by a BufferedInputStream or BufferedReader.
与OuputStreams / Writers相同的假设。
Same assumptions for OuputStreams / Writers.
其他流装饰器(即GZIPInputStream,MD5InputStream,YourSpecialObjectWriter)可能会做一些缓冲,但它对缓冲源不是很有害。
Other stream decorators (i.e. GZIPInputStream, MD5InputStream, YourSpecialObjectWriter) probably do some buffering, but its not very harmful to buffer the source.
这篇关于Java中的缓冲和无缓冲流的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!