今天談?wù)劻鞣锞蓿裁词荌O流?
流是磁盤或其它外圍設(shè)備中存儲的數(shù)據(jù)的源點或終點视乐。這是在《C程序設(shè)計語言》上的原話。流主要是指一種邏輯上的概念敢茁,它提供或存儲數(shù)據(jù)佑淀。產(chǎn)生數(shù)據(jù)的叫輸入流,消耗數(shù)據(jù)的叫輸出流彰檬。至于怎么產(chǎn)生伸刃,又怎么消耗,這是一種物理上的實現(xiàn)逢倍,根據(jù)每種設(shè)備有所不同捧颅,但C語言中對它們一視同仁,以一個“流”字來概括它們的特征较雕。作為流的使用者來說碉哑,不需要關(guān)心太多的細節(jié)。體現(xiàn)了計算機的核心思想對復雜的東西抽象化。流的實現(xiàn)保證了它具有它所聲明的特性扣典。C語言中對IO流的不同角度有不同的劃分妆毕。其實這里也有諸多形象的例子,比如設(shè)備與文件直接傳輸過程就像一個房間里放著一塊冰贮尖。一個房間需要用水设塔。那么最簡單的方式,融合它远舅,以水的形式流過去闰蛔。
按照流向分為: ?輸入流和輸出流
按照數(shù)據(jù)的表現(xiàn)形式分為 :字節(jié)流(二進制,可以處理一切文件图柏,文本序六,音頻等)和字符流文本文件,只能是純文本蚤吹,像txt)
文本流的特點是流由文本行組成例诀,每一行有0個或多個字符并以’\n’字符結(jié)束,即它是有一定意義的裁着,以某種字符集的字符組成的一個序列繁涂。一個文本流,讀入與寫出時可能會對其內(nèi)容作更改二驰,因為它是有一定意義的扔罪,系統(tǒng)可以識別并在適當時候解釋,比如在輸出文本流中碰到’\b’時桶雀,系統(tǒng)的操作是將輸入流中的前一個字符刪除矿酵,在終端上顯示就是在它前面輸出的這個字符被刪除了;二進制流則完成是由一些“生”的矗积,未經(jīng)處理的數(shù)據(jù)組成的全肮,C語言將它們看成由0與1組成的序列來讀與寫,所以它們的特性是同一系統(tǒng)中把同一二進制流讀入與寫出棘捣,其內(nèi)容沒有任何變化辜腺。這里區(qū)分了文本流和二進制流可以看出他們有諸多不同的地方的。其實說白了乍恐,文本流人家有樣式评疗,穿衣服。進cpu洗澡的時候禁熏,要有人脫衣服壤巷,出來的時候也有人給穿衣服,有人給打扮瞧毙。而二進制本來就是裸著胧华,出進倒是方便了寄症。文本文件是為人類使用設(shè)計的,像你的txt矩动。而二進制的流是計算機使用的有巧。像你編譯完的程序。
下面我們以圖的形式來區(qū)分二進制流和文本流
在IO流里悲没,輸入輸出分為4步:格式化/解析篮迎,緩沖,編碼轉(zhuǎn)換和傳遞示姿。
格式化/解析:在內(nèi)部數(shù)據(jù)表示(以字節(jié)為單位)與外部數(shù)據(jù)表示(以字符為單位)之間進行雙向轉(zhuǎn)換甜橱。例如一個2字節(jié)的整數(shù)10002,就需要5個字符來表示栈戳。
緩沖:用于在格式/解析與傳遞只加緩存字符序列岂傲。對于輸出,較短的字符序列格式化之后并不馬上輸出子檀,而是保存在緩沖區(qū)里镊掖,待累積到一定規(guī)模之后再傳遞到外部設(shè)備。相反褂痰,從外部設(shè)備讀入的大量數(shù)據(jù)也是先放在緩沖區(qū)亩进,然后逐步取出完成輸入。默認時缩歪,IO流的輸入輸出都是經(jīng)過緩沖的归薛,也可以讓IO流工作在無緩沖模式下。
編碼轉(zhuǎn)換: 是將一種字符表達式轉(zhuǎn)換成另一種字符表達式驶冒。如果格式化產(chǎn)生的字符表達式與外部字符表達式不同(輸出時)苟翻,或者外部表達式與IO流能解析的表達式不同(輸入時),就必須進行編碼轉(zhuǎn)換骗污。如多字節(jié)編碼與寬字符編碼之間的轉(zhuǎn)換等。多數(shù)情況下并不需要進行編碼轉(zhuǎn)換沈条。
傳遞:主要是與外部設(shè)備進行通信需忿。輸出時,傳遞負責將經(jīng)過格式化蜡歹、緩沖即編碼轉(zhuǎn)換后的字符序列發(fā)送到外部設(shè)備屋厘;輸入時,則負責將外部設(shè)備抽取數(shù)據(jù)月而,為其后進行的編碼轉(zhuǎn)換汗洒、緩沖及解析提供字符序列。在我們學習的C語言中也是這個過程父款。你用一些函數(shù)讀取文件的時候也是要解析然后放到緩沖區(qū)溢谤,然后使用瞻凤。
2016年10月15日13:42:30 張飛online