文字資料流和二進位流
引用:http://www.zzzhe.com/Article/HTML/1140.html
1. 什麼是流?
在C中引入了流(stream)的概念。它將資料的輸入輸出看作是資料的流入和流出,這樣不管是磁碟檔案或者是物理裝置(印表機、顯示器、鍵盤等),都可看作一種流的源和目的,視他們為同一種東西,而不管其具體的物理結構,即對他們的操作,就是資料的流入和流出。這種把資料的輸入輸出操作對象,抽象化為一種流,而不管它的具體結構的方法很有利於編程,而涉及流的輸出操作函數可用於各種對象,與其具體的實體無關,即具有通用性。
給流下個概念,流是程式輸入或輸出的一個連續的位元組序列。
2. 流的分類和不同流的特性:
在C中流可分為兩大類,即文字資料流(text stream)和二進位流(binary stream)。所謂文字資料流是指在流中流動的資料是以字元形式出現。在文字資料流中,'/n'被換成斷行符號CR和換行LF的代碼0DH和0AH。而當輸出時,則0DH和0AH本換成'/n'。
二進位流是指流動的是位元字序列,若流中有字元,則用一個位元組的二進位ASCII碼錶示,若是數字,則用一個位元組的位元表示。在流入流出時,對/n符號不進行變換。例如2001這個數,在文字資料流中用其ASCII碼錶示為:
'2' '0' '0' '1'
| | | |
50 48 48 49
共佔4位元組。而在二進位流中則表示為:00000111 11010001 用十六進位就是07D1。只佔兩位元組。
由此看出,二進位流比文字資料流節省空間的,且不用進行對/n的轉換,這樣可以大大加快流的速度,提高效率。因而,對於含有大量數字資訊的數字流,可以採用二進位流的方式;對於含有大量字元資訊的流,則採用文字資料流的方式。
3. 文字檔與二進位檔案的優缺點
因為文字檔與二進位檔案的區別僅僅是編碼上不同,所以他們的優缺點就是編碼的優缺點,這個找本編碼的書來看看就比較清楚了。一般認為,文字檔編碼基於字元定長,解碼容易些;二進位檔案編碼是變長的,所以它靈活,儲存利用率要高些,解碼難一些(不同的二進位檔案格式,有不同的解碼方式)。關於空間利用率,想想看,二進位檔案甚至可以用一個位元來代表一個意思(位操作),而文字檔任何一個意思至少是一個字元.
4. 總結
雖然流本質來說都是網路上傳輸的0、1的位元位,但流中流動的資料的基本單元是不一樣的。
文字資料流是指在流中流動的資料是以字元的形式出現的。流中的每一個字元對應一個位元組,用於存放對應的ASCII碼值;
二進位流中的資料是按照二進位編碼的方式直接來存放檔案的。比如數5678的二進位流中的儲存形式為:00010110 00101110隻佔二個位元組。位元據也可在螢幕上顯示, 但其內容無法讀懂。
所以,二進位流比文字資料流更節省空間的(),且不用對分行符號進行轉換,這樣可以大大加快流的速度,提高效率,二進位流沒有行長度的限制,也可以包含Null 字元(NULL)。因此,對於含有大量資料資訊的數字流,可以採用二進位流的方式;對於含有大量字元資訊的流,則採用文字資料流的方式。而對於文本的傳輸,兩者的效率基本上是一隻的,文字資料流本質上來講也是一種二進位流,只是在於位元組編碼的策略和格式不同而已。