文字流和二進位製流
我們在寫c程式的時候經常會涉及到對流的操作,比如說從標準輸入流讀取一串字串,然後通過標準輸出流輸出顯示在螢幕上,這也就是所謂的io操作。那麼流究竟是什麼東西?下面首先對流這個概念做一下解釋。
一. 流(stream)的概念
ansi c進一步對io的概念進行抽象。就c程式而言,所有的io操作只是簡單地從程式移進或者移出位元組,這種位元組流便被稱為流(stream)。程式設計師只需要關心建立正確的輸出位元組資料,以及正確的解釋從輸入讀取的位元組資料,特定io裝置的細節對程式設計師是隱藏的。
因此流是乙個高度抽象的概念,它將資料的輸入和輸出看作是資料的流入和流出,這樣不管是什麼io裝置:顯示器、鍵盤還是硬碟,都被視為同一種東西。都可以作為流的源和目的,對它們的操作,就是資料的流入和流出。
在c語言中流分為兩種型別:文字流(text stream)和二進位製流(binary stream)。下面分別進行介紹。
二. 文字流
文字流是指在流中流動的資料是以字元的形式出現的。流中的每乙個字元對應乙個位元組,用於存放對應的ascii碼值,因此文字流中的資料可以顯示和列印出來,都是使用者可以讀懂的資訊。比如數5678在文字流中的存放形式是:
ascii碼: 00110101 00110110 00110111 00111000
↓ ↓ ↓ ↓
十進位製碼: 5 6 7 8
一共占用4個位元組。
文字流的有些特性在不同的系統中可能不同。其中之一是文字行的最大長度,標準規定至少允許254個字元。另乙個可能的不同是文字行的結束方式。例如,在ms-dos系統中,文字檔案約定以乙個回車符和乙個換行符(也叫行反饋符)結尾,不過unix系統只使用乙個換行符結尾。文字流中不能包含空字元(即ascii碼中的null)。
三. 二進位製流
二進位製流中的位元組將完全根據程式編寫它們的形式寫入到檔案或者裝置中,而且完全根據它們從檔案或者裝置讀取的形式讀入到程式中。它們並未做任何改變,這種型別的流適於非文字資料,但是如果你不希望io函式修改文字檔案的行末字元,也可以把它用於文字檔案。
二進位製流中的資料是按照二進位制編碼的方式來存放檔案的。比如數5678的二進位製流中的儲存形式為:00010110 00101110只佔二個位元組。二進位制資料也可在螢幕上顯示, 但其內容無法讀懂。
二進位製流比文字流更節省空間,且不用對換行符進行轉換,這樣可以大大加快流的速度,提高效率,二進位製流沒有行長度的限制,也可以包含空字元(null)。因此,對於含有大量資料資訊的數字流,可以採用二進位製流的方式;對於含有大量字元資訊的流,則採用文字流的方式。
文字檔案是基於字元編碼的檔案,基本是定長的,常見的編碼有ascii編碼,unicode編碼等等。二進位制檔案是基於值編碼的檔案,變長編碼,你可以根據具體應用,指定某個值是什麼意思(這樣乙個過程,可以看作是自定義編碼)。
文字流和二進位製流
華清遠見 楊碩 我們在寫 c程式的時候經常會涉及到對流的操作,比如說從標準輸入流讀取一串字串,然後通過標準輸出流輸出顯示在螢幕上,這也就是所謂的 io操作。那麼流究竟是什麼東西?下面首先對流這個概念做一下解釋。一 流 stream 的概念 計算機有很多外部裝置,比如鍵盤 滑鼠 cd rom io操作...
文字流和二進位製流
華清遠見嵌入式學院 講師。我們在寫c程式的時候經常會涉及到對流的操作,比如說從標準輸入流讀取一串字串,然後通過標準輸出流輸出顯示在螢幕上,這也就是所謂的io操作。那麼流究竟是什麼東西?下面首先對流這個概念做一下解釋。一 流 stream 的概念 ansi c進一步對io的概念進行抽象。就c程式而言,...
文字流和二進位製流
我們在寫c程式的時候經常會涉及到對流的操作,比如說從標準輸入流讀取一串字串,然後通過標準輸出流輸出顯示在螢幕上,這也就是所謂的io操作。那麼流究竟是什麼東西?下面首先對流這個概念做一下解釋。一 流 stream 的概念 ansi c進一步對io的概念進行抽象。就c程式而言,所有的io操作只是簡單地從...