阿神2017-04-17 16:45:03
所有的IO操作都是透過位元組完成的,系統底層不存在字元這個概念,Java中 InputStream 和 OutputStream 中只有位元組操作方法,沒有字串方法。所有的可以進行字串讀寫的流封裝對象,都是上層實現,方便使用而已。
具體選擇那種流來使用,他們之間效率如何,都要看具體場景和功能實現的目的,沒有單純的好壞。
以你上面的兩個例子,效果完全是一樣的,只不過你選擇使用 BufferedWriter 和 BufferedReader 的內部實作還是位元組實作 Buffer 緩衝而已。
Java 是開源的,建議多看源碼,熟悉內部原理和實作。
天蓬老师2017-04-17 16:45:03
兩者的區別是:字節流可以既可以操作文本文件,也可以操作非文本文件,如一些二進制數據(圖片,視頻,對象),而字符流只能操作文本。這也是兩者的適用情況,如何決定該使用哪種資料流讀寫取決於要讀寫的資料類型,若是文字本件,當然選擇字元流,因為我們都知道字元流每次處理的單元為2個位元組的Unicode字符,而位元組流每次處理的是一個,若是非文字文件,那麼就只能用字節流了,這個時候就不能單純的看誰的效率高了。我想這也是為什麼要有兩者資料流的原因吧。
迷茫2017-04-17 16:45:03
對小文件讀寫,幾乎無差異。
對大文件讀寫,Buffer比較好。對於多次讀寫硬碟,好的快取機制能快一點。比方說60GB文件,你肯定分批(甚至分行),多次讀寫。
其次,你想處理字符,還是字節,根據需要選擇。