分析文字檔案與二進位制檔案的區別和讀寫差異

2021-10-06 22:23:40 字數 2649 閱讀 9182

大家都知道計算機的儲存在物理上是二進位制的,所以文字檔案與二進位制檔案的區別並不是物理上的,而是邏輯上的。這兩者只是在編碼層次上有差異。簡單來說,文字檔案是基於字元編碼的檔案,常見的編碼有ascii編碼,unicode編碼等等。二進位制檔案是基於值編碼的檔案,你可以根據具體應用,指定某個值是什麼意思(這樣乙個過程,可以看作是自定義編碼。

從上面可以看出文字檔案基本上是定長編碼的(也有非定長的編碼如utf-8)。而二進位制檔案可看成是變長編碼的,因為是值編碼嘛,多少個位元代表乙個值,完全由你決定。大家可能對bmp檔案比較熟悉,就拿它舉例子吧,其頭部是較為固定長度的檔案頭資訊,前2位元組用來記錄檔案為bmp格式,接下來的8個位元組用來記錄檔案長度,再接下來的4位元組用來記錄bmp檔案頭的長度。

文字工具開啟乙個檔案的過程是怎樣的呢?拿記事本來說,它首先讀取檔案物理上所對應的二進位制位元流,然後按照你所選擇的解碼方式來解釋這個流,然後將解釋結果顯示出來。一般來說,你選取的解碼方式會是ascii碼形式(ascii碼的乙個字元是8個位元),接下來,它8個位元8個比特地來解釋這個檔案流。例如對於這麼乙個檔案流」01000000_01000001_01000010_01000011」(下劃線」_」,為了增強可讀性手動新增的),第乙個8位元」01000000」按ascii碼來解碼的話,所對應的字元是字元」a」,同理其它3個8位元可分別解碼為」bcd」,即這個檔案流可解釋成「abcd」,然後記事本就將這個「abcd」顯示在螢幕上。

事實上,世界上任何東西要與其他東西通訊會話,都存在乙個既定的協議,既定的編碼。人與人之間通過文字聯絡,漢字「媽」代表生你的那個人,這就是一種既定的編碼。但注意到這樣一種情況,漢字「媽」在日本文字裡有可能是你生下的那個人,所以當乙個中國人a與日本b之間用「媽」這個字進行交流,出現誤解就很正常的。用記事本開啟二進位制檔案與上面的情況類似。記事本無論開啟什麼檔案都按既定的字元編碼工作(如ascii碼),所以當他開啟二進位制檔案時,出現亂碼也是很必然的一件事情了,解碼和解碼不對應嘛。例如檔案流」00000000_00000000_00000000_00000001」可能在二進位制檔案中對應的是乙個四位元組的整數int 1,在記事本裡解釋就變成了」null_null_null_soh」這四個控制符。

文字檔案的儲存與其讀取基本上是個逆過程。而二進位制檔案的訪問顯然與文字檔案的訪問差不多,只是編/解碼方式不同而已。

因為文字檔案與二進位制檔案的區別僅僅是編碼上不同,所以他們的優缺點就是編碼的優缺點,這個找本編碼的書來看看就比較清楚了。一般認為,文字檔案編碼基於字元定長,解碼容易些;二進位制檔案編碼是變長的,所以它靈活,儲存利用率要高些,解碼難一些(不同的二進位制檔案格式,有不同的解碼方式)。關於空間利用率,想想看,二進位制檔案甚至可以用乙個位元來代表乙個意思(位操作),而文字檔案任何乙個意思至少是乙個字元。

在windows下,文字檔案不一定是一ascii來存貯的,因為ascii碼只能表示128的標識,你開啟乙個txt文件,然後另存為,有個選項是編碼,可以選擇存貯格式,一般來說utf-8編碼格式相容性要好一些.而二進位製用的計算機原始語言,不存貯相容性. 很多書上還認為,文字檔案的可讀性要好些,儲存要花費轉換時間(讀寫要編譯碼),而二進位制檔案可讀性差,儲存不存在轉換時間(讀寫不要編譯碼,直接寫值).這裡的可讀性是從軟體使用者角度來說的,因為我們用通用的記事本工具就幾乎可以瀏覽所有文字檔案,所以說文字檔案可讀性好;而讀寫乙個具體的二進位制檔案需要乙個具體的檔案解碼器,所以說二進位制檔案可讀性差,比如讀bmp檔案,必須用讀圖軟體。

而這裡的儲存轉換時間應該是從程式設計的角度來說的,因為有些作業系統如windows需要對回車換行符進行轉換(將」\n」,換成」\r\n」,所以檔案讀寫時,作業系統需要乙個乙個字元的檢查當前字元是不是」\n」或」\r\n」).這個在儲存轉換在linux作業系統中並不需要,當然,當在兩個不同的作業系統上共享檔案時,這種儲存轉換又可能出來。

要弄明白二者的區別,需要知道檔案的讀寫過程。以讀檔案為例,

實際上是磁碟 》 檔案緩衝區》應用程式記憶體空間這兩個轉化過程。我們說「文字檔案和二進位制檔案沒有區別」,實際上針對的是第乙個過程;既然沒有區別,那麼開啟方式不同,為何顯示內容就不同呢?這個區別實際上是第二個過程造成的。

檔案實際上包括兩部分,控制資訊和內容資訊。純文字檔案僅僅是沒有控制格式資訊罷了;

實際上也是一種特殊的二進位制檔案。所以,我們很難區分二者的不同,因為他們的概念上不是完全互斥的。我們說文字檔案是特殊的二進位制檔案,是因為文字檔案實際上的解釋格式已經確定了:ascii或者unicode編碼。文字檔案的乙個缺點是,它的熵往往較低,也就是說,其實本可以用更小的儲存空間記錄這些資訊。比如,文字檔案中的乙個數字65536,需要用5個位元組來儲存;但是用二進位制格式,採用int儲存,僅僅需要2個位元組。而二進位制檔案elf和bmp等,都往往有乙個head,告訴你檔案資訊和解釋方式。

記事本支援文字檔案而不支援二進位制檔案,所以如果你用記事本開啟文字檔案那麼一切正常,如果開啟的是二進位制檔案就會出現亂碼。但也有不亂碼的地方,你會注意到那些地方都是字元編碼的,而對於int、double等型別所對應的值都是亂碼的,這是由於記事本只能夠識別字元型別,而無法識別其他型別。

1、二進位制檔案是把記憶體中的資料按其在記憶體中的儲存形式原樣輸出到磁碟上存放,也就是說存放的是資料的原形式。

2、文字檔案是把資料的終端形式的二進位制資料輸出到磁碟上存放,也就是說存放的是資料的終端形式。

字元資料本身在記憶體中就經過了編碼,所以無論是二進位制還是文字形式都是一樣的,而對於非字元資料來說,例如inti=10;如果用二進位制來進行儲存的話為1010,但是如果需要用文字形式來進行儲存的話就必須進行格式化編碼(對1和0分別編碼,即形式為『1』和『0』分別對應的碼值)。

文字檔案與二進位制檔案

從本質上說所有檔案都是二進位制檔案,文字i o是在二進位制i o基礎上提供的一層抽象,它封裝了字元的編碼和解碼過程。在文字i o中自動進行編碼與解碼。在windows和dos系統中,狹義的文字檔案是指擴充套件名為txt的檔案。實際上,那些沒有規定格式的,由可理解的的ascii以及其它編碼文字組成的檔...

文字檔案與二進位制檔案

維基百科 二進位制檔案一般指包含ascii及擴充套件ascii字元中編寫的資料或程式指令的檔案。廣義的二進位制檔案即為檔案,由檔案在外部儲存裝置的存放方式為二進位制而得名。狹義的二進位制檔案即指除文字檔案以外的檔案。簡單來說,文字檔案是基於字元編碼的檔案,常見的編碼有ascii編碼,unicode編...

文字檔案與二進位制檔案

什麼是文字檔案,什麼是二進位制檔案?在windows和dos系統中,狹義的文字檔案是指擴充套件名為txt的檔案。實際上,那些沒有格式的,由可理解的ascii以及其他編碼文字組成的檔案都是文字檔案,如c原始檔,html超文字檔案,xml。除此之外的其他檔案都是二進位制檔案,如word檔案doc,影象格...