2012-10-18 128 views
11

我經歷了一些關於Java IO的文件,只是想確認我是否可以得到這個權利:緩衝和無緩衝流在Java中

無緩衝輸入流:的FileInputStream,InputStreamReader的,的FileReader

無緩衝輸出流:FileOutputStream中,OutputStreamWriter,FileWriter的

緩衝輸出流:爲PrintStream,PrintWriter的

另外,我們有BufferedInputStream,BufferedOutputStream,BufferedReader和BufferedWriter流來將未緩衝的流轉換成緩衝版本。

最後,我觀察到對於字符流,即字符流。 InputStreamReader,FileReader,OutputStreamWriter,FileWriter,一個內部字節緩衝區在它們被髮送到流之前被維護。這個字節緩衝區不在我們的控制之下。因此,對於字符流,緩衝是指用於存儲進入和離開程序的字符的高級字符緩衝區。

我說的一切都正確嗎?

P.S. - 據我所知,這個緩衝問題是有些依賴於實現的,但我只是想確認的javadoc在說什麼經驗

+3

聽起來或多或少是對的,但是你應該依賴它在Javadoc中所說的內容,而不是其他人所說的。實施必須按照Javadoc中的說法進行。你遺漏了'ObjectOutputStream',它們都被緩衝了,這取決於它究竟在做什麼。您也忽略了過濾器流和讀者。 – EJP

+0

還沒有去那麼遠;) – Chatterjee

+0

我喜歡這個問題。沒有問題要解決,只是尋求理解。這很令人耳目一新。 –

回答

1

規則:

  1. 任何的InputStream /讀卡器直接從外部源讀取( FileInputStream,SocketInputStream等)是'原始的'並被認爲是無緩衝的。 (雖然實際上,可能有一些緩衝正在進行,取決於實現)

  2. 任何'原始'InputStream或Reader都可以被BufferedInputStream或BufferedReader緩衝。

  3. OuputStreams/Writers的假設相同。

  4. 其他流裝飾器(即GZIPInputStream,MD5InputStream,YourSpecialObjectWriter)可能會做一些緩衝,但是它對緩衝源不是很有害。