文本流和二進(jìn)制流
時(shí)間:2016-12-30作者:華清遠(yuǎn)見
我們在寫C程序的時(shí)候經(jīng)常會(huì)涉及到對流的操作,比如說從標(biāo)準(zhǔn)輸入流讀取一串字符串,然后通過標(biāo)準(zhǔn)輸出流輸出顯示在屏幕上,這也就是所謂的IO操作。那么流究竟是什么東西?下面首先對流這個(gè)概念做一下解釋。 一. 流(stream)的概念 計(jì)算機(jī)有很多外部設(shè)備,比如鍵盤、鼠標(biāo)、CD-ROM驅(qū)動(dòng)器、硬盤、網(wǎng)絡(luò)接口、視頻適配器等。這些設(shè)備都和IO操作有關(guān)系,而每種設(shè)備都具有不同的特性和操作協(xié)議。操作系統(tǒng)負(fù)責(zé)實(shí)現(xiàn)微處理器和和這些外設(shè)的通信細(xì)節(jié),并向應(yīng)用開發(fā)程序員提供更為簡單和統(tǒng)一的IO接口,比如Linux操作系統(tǒng)下的open(),read(),write()等系統(tǒng)調(diào)用使我們可以以文件的形式打開并讀寫一個(gè)設(shè)備。 ANSI C進(jìn)一步對IO的概念進(jìn)行抽象。就C程序而言,所有的IO操作只是簡單地從程序移進(jìn)或者移出字節(jié),這種字節(jié)流便被稱為流(stream)。程序員只需要關(guān)心創(chuàng)建正確的輸出字節(jié)數(shù)據(jù),以及正確的解釋從輸入讀取的字節(jié)數(shù)據(jù),特定IO設(shè)備的細(xì)節(jié)對程序員是隱藏的。 因此流是一個(gè)高度抽象的概念,它將數(shù)據(jù)的輸入和輸出看作是數(shù)據(jù)的流入和流出,這樣不管是什么IO設(shè)備:顯示器、鍵盤還是硬盤,都被視為同一種東西。都可以作為流的源和目的,對它們的操作,就是數(shù)據(jù)的流入和流出。 在C語言中流分為兩種類型:文本流(text stream)和二進(jìn)制流(binary stream)。下面分別進(jìn)行介紹。 二. 文本流 文本流是指在流中流動(dòng)的數(shù)據(jù)是以字符的形式出現(xiàn)的。流中的每一個(gè)字符對應(yīng)一個(gè)字節(jié),用于存放對應(yīng)的ASCII碼值,因此文本流中的數(shù)據(jù)可以顯示和打印出來,都是用戶可以讀懂的信息。比如數(shù)5678在文本流中的存放形式是:
ASCII碼: 00110101 00110110 00110111 00111000 一共占用4個(gè)字節(jié)。 文本流的有些特性在不同的系統(tǒng)中可能不同。其中之一是文本行的大長度,標(biāo)準(zhǔn)規(guī)定至少允許254個(gè)字符。另一個(gè)可能的不同是文本行的結(jié)束方式。例如,在MS-DOS系統(tǒng)中,文本文件約定以一個(gè)回車符和一個(gè)換行符(也叫行反饋符)結(jié)尾,不過UNIX系統(tǒng)只使用一個(gè)換行符結(jié)尾。文本流中不能包含空字符(即ASCII碼中的NULL)。 三. 二進(jìn)制流 二進(jìn)制流中的字節(jié)將完全根據(jù)程序編寫它們的形式寫入到文件或者設(shè)備中,而且完全根據(jù)它們從文件或者設(shè)備讀取的形式讀入到程序中。它們并未做任何改變,這種類型的流適于非文本數(shù)據(jù),但是如果你不希望IO函數(shù)修改文本文件的行末字符,也可以把它用于文本文件。 二進(jìn)制流中的數(shù)據(jù)是按照二進(jìn)制編碼的方式來存放文件的。比如數(shù)5678的二進(jìn)制流中的存儲形式為:00010110 00101110只占二個(gè)字節(jié)。二進(jìn)制數(shù)據(jù)也可在屏幕上顯示, 但其內(nèi)容無法讀懂。 二進(jìn)制流比文本流更節(jié)省空間,且不用對換行符進(jìn)行轉(zhuǎn)換,這樣可以大大加快流的速度,提高效率,二進(jìn)制流沒有行長度的限制,也可以包含空字符(NULL)。因此,對于含有大量數(shù)據(jù)信息的數(shù)字流,可以采用二進(jìn)制流的方式;對于含有大量字符信息的流,則采用文本流的方式。
相關(guān)資訊
發(fā)表評論
|