字节流还是字符流
以下說(shuō)的流都是文件流。
字節(jié)流和字符流的區(qū)別
文件在磁盤上的存儲(chǔ)是按二進(jìn)制存儲(chǔ)的,也即按字節(jié)存儲(chǔ)的。
所以字節(jié)流就是相當(dāng)于一個(gè)管道連通了應(yīng)用程序和磁盤上的文件,每次讀取都是以字節(jié)為單位。
而字符流雖然也相當(dāng)于一個(gè)管道連通了應(yīng)用程序和磁盤上的文件,但是該管道自帶過(guò)濾效果,即根據(jù)編碼,將字節(jié)組裝成不同的字符。
為什么需要過(guò)濾呢,因?yàn)槟愦娴臅r(shí)候是根據(jù)編碼存的,所以讀的時(shí)候自然也要根據(jù)編碼讀唄。
何時(shí)使用字節(jié)流字符流
如果你所要讀的文件是與編碼無(wú)關(guān)的,比如圖像啊,視頻啊, 那么就用字節(jié)流。 或者雖然你要讀的文件與編碼有關(guān),但是你讀的目的既不是為了顯示,又不是為了使用其中的某個(gè)字符,而是為了拷貝復(fù)制,那么也是可以使用字節(jié)流的。
那么什么時(shí)候使用字符流就很顯然了, 你要讀的文件與編碼有關(guān),且讀的目的是為了顯示或者得到其中的某個(gè)字符,那么當(dāng)然使用字符流了。
Java是如何識(shí)別有編碼的文件的
如果是輸入流,創(chuàng)建InputStreamReader對(duì)象時(shí),需要傳入一個(gè)字節(jié)流和指定字符編碼。InputStreamReader內(nèi)部根據(jù)字節(jié)流和字符編碼,生成StreamDecoder對(duì)象,該對(duì)象會(huì)根據(jù)字符編碼將若干個(gè)字節(jié)解碼為一個(gè)字符。
如果是輸出流,創(chuàng)建OutputStreamWriter對(duì)象時(shí),需要傳入一個(gè)字節(jié)流和指定字符編碼。OutputStreamWriter內(nèi)部根據(jù)字節(jié)流和字符編碼,生成StreamEncoder對(duì)象,該對(duì)象會(huì)根據(jù)字符編碼將一個(gè)字符編碼成若干個(gè)字節(jié)。
轉(zhuǎn)載于:https://www.cnblogs.com/justPassBy/p/5340832.html
總結(jié)