華清遠見——楊碩
我們在寫
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 ↓
↓ ↓
↓十進位製碼:56
78 一共占用
4個位元組。
文字流的有些特性在不同的系統中可能不同。其中之一是文字行的最大長度,標準規定至少允許
254個字元。另乙個可能的不同是文字行的結束方式。例如,在
ms-dos
系統中,文字檔案約定以乙個回車符和乙個換行符(也叫行反饋符)結尾,不過
unix
系統只使用乙個換行符結尾。文字流中不能包含空字元(即
ascii
碼中的null
)。三.
二進位製流
二進位製流中的位元組將完全根據程式編寫它們的形式寫入到檔案或者裝置中,而且完全根據它們從檔案或者裝置讀取的形式讀入到程式中。它們並未做任何改變,這種型別的流適於非文字資料,但是如果你不希望
io函式修改文字檔案的行末字元,也可以把它用於文字檔案。
二進位製流中的資料是按照二進位制編碼的方式來存放檔案的。比如數
5678
的二進位製流中的儲存形式為:
00010110 00101110
只佔二個位元組。二進位制資料也可在螢幕上顯示,
但其內容無法讀懂。
二進位製流比文字流更節省空間,且不用對換行符進行轉換,這樣可以大大加快流的速度,提高效率,二進位製流沒有行長度的限制,也可以包含空字元(
null
)。因此,對於含有大量資料資訊的數字流,可以採用二進位製流的方式;對於含有大量字元資訊的流,則採用文字流的方式。
文字流和二進位製流
華清遠見嵌入式學院 講師。我們在寫c程式的時候經常會涉及到對流的操作,比如說從標準輸入流讀取一串字串,然後通過標準輸出流輸出顯示在螢幕上,這也就是所謂的io操作。那麼流究竟是什麼東西?下面首先對流這個概念做一下解釋。一 流 stream 的概念 ansi c進一步對io的概念進行抽象。就c程式而言,...
文字流和二進位製流
我們在寫c程式的時候經常會涉及到對流的操作,比如說從標準輸入流讀取一串字串,然後通過標準輸出流輸出顯示在螢幕上,這也就是所謂的io操作。那麼流究竟是什麼東西?下面首先對流這個概念做一下解釋。一 流 stream 的概念 ansi c進一步對io的概念進行抽象。就c程式而言,所有的io操作只是簡單地從...
文字流和二進位製流
1 c中引入流的概念,將資料的資料的輸入輸出看作是資料的流入和流出,這樣不管是磁碟檔案或者是物理裝置 印表機 顯示器 鍵盤等 都可看作是資料流的源和目的。抽象為一種流,更有利於程式設計,具體涉及資料流的輸入輸出可用作各種物件。2 在c中流可分為兩類,文字流和二進位製流。計算機的儲存在物理上是二進位制...