2013-12-10 54 views
0

我想創建一個程序,它允許我從本地文件獲取名稱並將它們添加到名稱的字符串數組中。我並不完全理解字符流,二進制流和緩衝流之間的區別,並且在線查看並未回答我的問題,即:我將使用哪種類型的流從文本文件中讀取以創建字符串數組?Java - 字符和字節流

+0

這是關於如何流實現威脅傳入的數據,例如。你能夠將數據作爲字節數組,或者作爲單個字符(並不總是單個字節)。總而言之,所有的流都基本相同。 – Antoniossss

+0

嗯,那麼爲什麼人們會使用字節流,如果我們都使用字符。 AKA這個字節流從哪裏來? – bob

+0

如果你不想使用字符...如果你只是想讀/寫原始/二進制數據..你使用字節流...檢查.. http://docs.oracle.com/javase/tutorial/i18n /text/stream.html http://stackoverflow.com/questions/8431787/whats-the-difference-between-character-stream-and-byte-stream – TheLostMind

回答

2

我不完全理解字符流,二進制流之間的差異,以及緩衝流

緩衝器這裏有一個紅色的鯡魚 - 這只是一個實現細節,往往使事情更加有效。瞭解您是否正在讀取二進制數據或文本數據很重要。如果你正在閱讀一個文本文件,你需要一個Reader的一些描述。您的文件包含二進制數據(所有文件基本上都是字節),您需要說明如何將其轉換爲文本。你可能使用FileReader,但我寧願使用包裝在InputStreamReader中的FileInputStream,因爲您可以指定編碼在二進制文本和文本之間進行轉換。您需要知道文件的編碼,例如UTF-8。

任何InputStream只返回二進制數據;和Reader返回文本數據。

無論哪種方式,如果你想讀一行行(現在還不清楚你的陣列將包括),你會希望有一個BufferedReader來包裝你InputStreamReaderFileReader,因爲它提供了readLine()方法。

嗯,那麼爲什麼人們會使用字節流,如果我們都使用字符。

我們沒有。圖像文件,音樂,視頻,壓縮數據,加密數據等不是固有的文本數據。如果您閱讀Reader的圖像文件,則幾乎肯定會丟失一些數據。

將文本視爲另一種文件格式 - 如果您嘗試加載圖像以顯示它,則需要理解該圖像文件格式的內容;如果您試圖加載音樂文件來播放音樂文件,那麼您需要了解音頻文件格式的內容 - 使用文本,InputStreamReader可以理解文本。

儘管在所有情況下我們都在文件級別有字節,但您使用的類將決定如何解釋這些字節。

+0

非常感謝!這有很大幫助 – bob