Java中的缓冲和无缓冲流 [英] Buffered and Unbuffered Streams in Java

查看:208
本文介绍了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:


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

  1. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆