2014-02-06 40 views
1

我一直在閱讀最近的oracle.com上的java教程,我正在嘗試瞭解I/O。但也有這麼多的東西,其中很多似乎是相同的,如: 數據流 掃描器 的PrintWriter 緩衝流 文件I/O流 過濾流 等瞭解各種I/O系統java

具體而言,例如,掃描儀和數據流有什麼區別?

起初,我可以保持在這一切的頂部,但只有太多的流和我/操作系統。有沒有人知道一個很好的教程或網站,可以清楚地瞭解這一切。我缺乏理解開始變得煩人。

+0

這真的很簡單。 '(輸入|輸出)流'是來自某處的字節流。 'Reader | Writer'也是來自某處的字符串。其他一切都是裝飾模式(緩衝等)。 'Scanner'是一個字符流表示符。 P.S不要忘記'Channel's和'RamdomAccessFiles's。 –

回答

1

Scanner可以附接到一個FileStream,或StringReadable,或任何從這些類派生的。把它想象成一個消費者。當你問它時它會吃東西。

A Stream是一個來源。一些輸入流有一個信號,說「我輸入了!」如果您繼續使用已經超出輸入的流,Java通常會等待更多輸入或者僅引發異常。重要的是要注意,一旦流被消耗,它就會永遠消失。一些讀者具有將流重置爲早期點的機制,但這些奇特的流暢機制不是標準流的一部分。把它們想象成河流。一旦你讓部分河流流過,它就消失了。

System.inInputStream的一個示例,即默認掛鉤到控制檯。想象一下,它是從你的鍵盤直接餵食。您可以附加掃描儀並嘗試使用用戶的輸入。掃描儀可以捕捉您鍵入的內容,但如果您沒有將其存儲在變量中,則鍵盤不會再打字。

1

這是一個難以回答的問題。我知道以前在學習網絡編程時,我有同樣的困惑。
你可以看看拉爾斯·沃格爾的教程 - 他寫的好代碼,使事情變得容易理解:http://www.vogella.com/tutorials/JavaIO/article.html

此外,如果你有一本好書,Java類可能更有意義,你熟悉他們之後。 Elliot「Rusty」Harold編寫了一本很好的Java網絡編程書籍: Java Network Programming

您需要熟悉「java.io. *」類以及每個類可用於什麼。有這麼一個原因,因爲你會爲一種類型的應用程序使用一個特定的類。