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