JAVA的I/O里面一大堆的類,剛開(kāi)始學(xué)的時(shí)候,真是狂暈。
認(rèn)真讀完Core java之后,才發(fā)現(xiàn)這一套機(jī)制其實(shí)還簡(jiǎn)單的,只要抓住2條脈絡(luò):byte和Char,Decrator模式
byte和Char的區(qū)別,說(shuō)起來(lái)很簡(jiǎn)單,一個(gè)是8位,一個(gè)是16位。為什么在java中要嚴(yán)格區(qū)分呢?因?yàn)閖ava是unicode的,也就是16位的,而很多系統(tǒng)通用的是ASCII(8bit)。正因?yàn)檫@種差異,在I/O機(jī)制中,用stream處理8位,Reader處理16位。在從輸入輸出角度來(lái)考慮,于是就有了InputStream/OutputStream和InputReader/OutputReader。
然而,這些原始流提供的功能太少了,效率也太低了。例如,一次只能讀多個(gè)字符而不能讀一行。為了提高效率,需要對(duì)他們進(jìn)行一層包裝,提供緩沖等功能。這個(gè)時(shí)候就應(yīng)用包裝器(Decrator)模式,設(shè)計(jì)了buffer... LineNumber...Data...等
當(dāng)然,操作文件的時(shí)候,可以簡(jiǎn)單的用FileReader,F(xiàn)ileWriter打開(kāi)文件,具體操作的時(shí)候PrintWriter就可以負(fù)責(zé)文件寫了,而讀文件一般需緩沖, 于是用BufferReader就行了