JAVA IO流相關(guān)內(nèi)容總結(jié)

最近剛看完b站上高淇老師的java300集教程,中間IO流那趴尤其云里霧里吼虎,前前后后看了幾遍又對比了代碼淋纲,IO流這部分的知識點差不多在腦子里也形成了一個體系,下面就總結(jié)一下教程中166到193講的IO流部分的內(nèi)容洪橘,就是我對這部分知識的理解。

首先IO流有三種分類:第一棵帽,輸入流熄求,輸出流。這就很好理解逗概,就是從程序的角度看弟晚,獲得信息就是輸入,給出信息就是輸出逾苫;第二卿城,字節(jié)流,字符流铅搓。字節(jié)流就是二進制的存儲方式瑟押,可以處理一切文件,而字符流就只能處理純文本星掰;第三多望,節(jié)點流嫩舟,處理流。節(jié)點流就是直接代表信息的源頭怀偷,而處理流只能起到增強功能家厌,所以必須包裹節(jié)點流才行。

IO流中有兩個重要的抽象類椎工,InputStream和OutputStream饭于,他們是字節(jié)流,也就是用byte處理數(shù)據(jù)维蒙。一種具體實現(xiàn)有FileInputStream和FileOutputStream掰吕,這里的File代表著一個源頭或目的地的意思,就是從文件讀或?qū)懭胛募Ee個栗子:

// 從文件讀取

File src = new File("e:/a.txt");

InputStream is = new FileInputStream(src);

byte[] flush = new byte[1024];

int len = 0;

while(len=is.read(flush)!=-1){

? ? String info = new String(flush, 0, len);

}

// 寫入文件

OutputStream os = new FileOutputStream(f, true);

byte data = "some information".getBytes();

os.write(data);

os.flush();

os.close();

這里的FileInputStream和FileOutputStream是字節(jié)流殖熟,所以讀取和寫入都用了byte數(shù)組。另外八千,在讀取時吗讶,采用了分段讀取的方法,就是一部分一部分地讀進flush中恋捆。

另外還有就是字符流照皆,讀純文本的,Reader和Writer沸停,實現(xiàn)類FileReader和FileWriter膜毁。具體方法找API吧,反正都是read write這種方法愤钾。

處理流瘟滨,BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter。這些是要包在節(jié)點流外面的能颁,起到一種提高性能的效果杂瘸。還有另外一個處理流,轉(zhuǎn)換流伙菊,起到解碼败玉,編碼的作用,能字符流和字節(jié)流相互轉(zhuǎn)換镜硕。InputStreamReader和OutputStreamWriter运翼。

其他的一個節(jié)點流,ByteArrayInputStream和ByteArrayOutputStream兴枯。這里ByteArray和File那對的命名有一定區(qū)別血淌,比如FileOutputStream是指輸出到File上,而ByteArrayOutputStream是指把ByteArray寫到OutputStream上财剖,就是ByteArray是被操作的對象悠夯,而File是目的地癌淮,這里很容易搞暈。這個節(jié)點流和上面一樣疗疟,用分段讀取的方法來操作该默,舉個栗子瞳氓,分析這個題目策彤,把文件中的一張圖,寫到byte數(shù)組中:從程序的角度看匣摘,首先我們要把圖讀到程序中店诗,就是輸入,從文件音榜,那就是FileInputStream庞瘸;接下來,把程序中的內(nèi)容赠叼,寫出去擦囊,就是輸出,到byte數(shù)組嘴办,就是ByteArrayOutputStream瞬场,大致相關(guān)的代碼如下,省略了異常還有聲明等部分:

InputStream is = new FileInputStream(new File("..."));

OutputStream os = new?ByteArrayOutputStream();

while(len=is.read(flush)!=-1){

? ? os.write(flush, 0, len);

}

os.flush();

return os.toByteArray();

還有兩種處理流涧郊,DataInputStream, DataOutputStream和ObjectInputStream, ObjectOutputStream贯被。對命名的理解和ByteArray是一樣的,就是被操作的對象是什么類型妆艘。其中一個很重要的應用就是序列化反序列化彤灶。把object寫到流中再讀出來,深克隆就用了這個操作批旺。因為這倆是處理流幌陕,所以需要包裹節(jié)點流。舉一個序列化反序列化的例子汽煮,把object寫到流中搏熄,即輸出,用ObjectOutputStream逗物,因為要包裹OutputStream搬卒,所以還要用到ByteArrayOutputStream;之后翎卓,把流中的object讀到程序里契邀,即輸入,用ObjectInputStream失暴,要包裹InputStream坯门,所以還要用到ByteArrayInputStream微饥。代碼:

// 寫到流中

ByteArrayOutputStream baos = new?ByteArrayOutputStream();

ObjectOutputStream oos = new?ObjectOutputStream(baos);

oos.writeObject(obj);

// 從流中讀

ByteArrayInputStream bais = new?ByteArrayInputStream(baos.toByteArray());

ObjectInputStream ois = new?ObjectInputStream(bais);

return ois.readObject();

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市古戴,隨后出現(xiàn)的幾起案子欠橘,更是在濱河造成了極大的恐慌,老刑警劉巖现恼,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肃续,死亡現(xiàn)場離奇詭異,居然都是意外死亡叉袍,警方通過查閱死者的電腦和手機始锚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喳逛,“玉大人瞧捌,你說我怎么就攤上這事∪笪模” “怎么了姐呐?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長典蝌。 經(jīng)常有香客問我曙砂,道長,這世上最難降的妖魔是什么赠法? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任麦轰,我火速辦了婚禮,結(jié)果婚禮上砖织,老公的妹妹穿的比我還像新娘款侵。我一直安慰自己,他們只是感情好侧纯,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布新锈。 她就那樣靜靜地躺著,像睡著了一般眶熬。 火紅的嫁衣襯著肌膚如雪妹笆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天娜氏,我揣著相機與錄音拳缠,去河邊找鬼。 笑死贸弥,一個胖子當著我的面吹牛窟坐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼哲鸳,長吁一口氣:“原來是場噩夢啊……” “哼臣疑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起徙菠,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤讯沈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后婿奔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缺狠,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年脸秽,在試婚紗的時候發(fā)現(xiàn)自己被綠了儒老。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝴乔。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡记餐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出薇正,到底是詐尸還是另有隱情片酝,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布挖腰,位于F島的核電站雕沿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏猴仑。R本人自食惡果不足惜审轮,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辽俗。 院中可真熱鬧疾渣,春花似錦、人聲如沸崖飘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朱浴。三九已至吊圾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間翰蠢,已是汗流浹背项乒。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留梁沧,地道東北人檀何。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親埃碱。 傳聞我的和親對象是個殘疾皇子猖辫,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359