文本文件和二进制文件的区别
生活随笔
收集整理的這篇文章主要介紹了
文本文件和二进制文件的区别
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
廣義的二進(jìn)制文件即指文件,由文件在外部設(shè)備的存放形式為二進(jìn)制而得名。狹義的二進(jìn)制文件即除文本文件以外的文件。文本文件是一種由很多行字符構(gòu)成的計算機文件。文本文件存在于計算機系統(tǒng)中,通常在文本文件最后一行放置文件結(jié)束標(biāo)志。文本文件的編碼基于字符定長,譯碼相對要容易一些;二進(jìn)制文件編碼是變長的,靈活利用率要高,而譯碼要難一些,不同的二進(jìn)制文件譯碼方式是不同的。
從本質(zhì)上來說他們之間沒有什么區(qū)別,因為他們在硬盤上都有一種的存放方式--二進(jìn)制,但是如果要對他們有些區(qū)分的話,那可以這樣理解。每個字符由一個或多個字節(jié)組成,每個字節(jié)都是用的-128—127之間的部分?jǐn)?shù)值來表示的,也就是說,-128——127之間還有一些數(shù)據(jù)沒有對應(yīng)任何字符的任何字節(jié)。如果一個文件中的每個字節(jié)的內(nèi)容都是可以表示成字符的數(shù)據(jù),我們就可以稱這個文件為文本文件,可見,文本文件只是二進(jìn)制文件中的一種特例,為了與文本文件相區(qū)別,人們又把除了文本文件以外的文件稱為二進(jìn)制文件,由于很難嚴(yán)格區(qū)分文本文件和二進(jìn)制文件的概念,所以我們可以簡單地認(rèn)為,如果一個文件專門用于存儲文本字符的數(shù)據(jù),沒有包含字符以外的其他數(shù)據(jù),我們就稱之為文本文件,除此之外的文件就是二進(jìn)制文件。
第一是二進(jìn)制文件比較節(jié)約空間,這兩者儲存字符型數(shù)據(jù)時并沒有差別。但是在儲存數(shù)字,特別是實型數(shù)字時,二進(jìn)制更節(jié)省空間,比如儲存 Real*4 的數(shù)據(jù):3.1415927,文本文件需要 9 個字節(jié),分別儲存:3 . 1 4 1 5 9 2 7 這 9 個 ASCII 值,而二進(jìn)制文件只需要 4 個字節(jié)(DB 0F 49 40)
第二個原因是,內(nèi)存中參加計算的數(shù)據(jù)都是用二進(jìn)制無格式儲存起來的,因此,使用二進(jìn)制儲存到文件就更快捷。如果儲存為文本文件,則需要一個轉(zhuǎn)換的過程。在數(shù)據(jù)量很大的時候,兩者就會有明顯的速度差別了。
第三,就是一些比較精確的數(shù)據(jù),使用二進(jìn)制儲存不會造成有效位的丟失。 一、文本文件與二進(jìn)制文件的定義 大家都知道計算機的存儲在物理上是二進(jìn)制的,所以文本文件與二進(jìn)制文件的區(qū)別并不是物理上的,而是邏輯上的。這兩者只是在編碼層次上有差異。簡單來說,文本文件是基于字符編碼的文件,常見的編碼有ASCII編碼,UNICODE編碼等等。二進(jìn)制文件是基于值編碼的文件,你可以根據(jù)具體應(yīng)用,指定某個值是什么意思(這樣一個過程,可以看作是自定義編碼。
從上面可以看出文本文件基本上是定長編碼的(也有非定長的編碼如UTF-8)。而二進(jìn)制文件可看成是變長編碼的,因為是值編碼嘛,多少個比特代表一個值,完全由你決定。大家可能對BMP文件比較熟悉,就拿它舉例子吧,其頭部是較為固定長度的文件頭信息,前2字節(jié)用來記錄文件為BMP格式,接下來的8個字節(jié)用來記錄文件長度,再接下來的4字節(jié)用來記錄bmp文件頭的長度。
二、文本文件與二進(jìn)制文件的存取
文本工具打開一個文件的過程是怎樣的呢?拿記事本來說,它首先讀取文件物理上所對應(yīng)的二進(jìn)制比特流,然后按照你所選擇的解碼方式來解釋這個流,然后將解釋結(jié)果顯示出來。一般來說,你選取的解碼方式會是ASCII碼形式(ASCII碼的一個字符是8個比特),接下來,它8個比特8個比特地來解釋這個文件流。例如對于這么一個文件流"01000000_01000001_01000010_01000011"(下劃線''_'',為了增強可讀性手動添加的),第一個8比特''01000000''按ASCII碼來解碼的話,所對應(yīng)的字符是字符''A'',同理其它3個8比特可分別解碼為''BCD'',即這個文件流可解釋成“ABCD”,然后記事本就將這個“ABCD”顯示在屏幕上。
事實上,世界上任何東西要與其他東西通信會話,都存在一個既定的協(xié)議,既定的編碼。人與人之間通過文字聯(lián)絡(luò),漢字“媽”代表生你的那個人,這就是一種既定的編碼。但注意到這樣一種情況,漢字“媽”在日本文字里有可能是你生下的那個人,所以當(dāng)一個中國人A與日本B之間用“媽”這個字進(jìn)行交流,出現(xiàn)誤解就很正常的。用記事本打開二進(jìn)制文件與上面的情況類似。記事本無論打開什么文件都按既定的字符編碼工作(如ASCII碼),所以當(dāng)他打開二進(jìn)制文件時,出現(xiàn)亂碼也是很必然的一件事情了,解碼和譯碼不對應(yīng)嘛。例如文件流''00000000_00000000_00000000_00000001''可能在二進(jìn)制文件中對應(yīng)的是一個四字節(jié)的整數(shù)int 1,在記事本里解釋就變成了"NULL_NULL_NULL_SOH"這四個控制符。
文本文件的存儲與其讀取基本上是個逆過程。而二進(jìn)制文件的存取顯然與文本文件的存取差不多,只是編/解碼方式不同而已,也不再敘述。
三、文本文件與二進(jìn)制文件的優(yōu)缺點
因為文本文件與二進(jìn)制文件的區(qū)別僅僅是編碼上不同,所以他們的優(yōu)缺點就是編碼的優(yōu)缺點,這個找本編碼的書來看看就比較清楚了。一般認(rèn)為,文本文件編碼基于字符定長,譯碼容易些;二進(jìn)制文件編碼是變長的,所以它靈活,存儲利用率要高些,譯碼難一些(不同的二進(jìn)制文件格式,有不同的譯碼方式)。關(guān)于空間利用率,想想看,二進(jìn)制文件甚至可以用一個比特來代表一個意思(位操作),而文本文件任何一個意思至少是一個字符.
在windows下,文本文件不一定是一ASCII來存貯的,因為ASCII碼只能表示128的標(biāo)識,你打開一個txt文檔,然后另存為,有個選項是編碼,可以選擇存貯格式,一般來說UTF-8編碼格式兼容性要好一些.而二進(jìn)制用的計算機原始語言,不存貯兼容性. 很多書上還認(rèn)為,文本文件的可讀性要好些,存儲要花費轉(zhuǎn)換時間(讀寫要編譯碼),而二進(jìn)制文件可讀性差,存儲不存在轉(zhuǎn)換時間(讀寫不要編解碼,直接寫值).這里的可讀性是從軟件使用者角度來說的,因為我們用通用的記事本工具就幾乎可以瀏覽所有文本文件,所以說文本文件可讀性好;而讀寫一個具體的二進(jìn)制文件需要一個具體的文件解碼器,所以說二進(jìn)制文件可讀性差,比如讀BMP文件,必須用讀圖軟件.
而這里的存儲轉(zhuǎn)換時間應(yīng)該是從編程的角度來說的,因為有些操作系統(tǒng)如windows需要對回車換行符進(jìn)行轉(zhuǎn)換(將''\n'',換成''\r\n'',所以文件讀寫時,操作系統(tǒng)需要一個一個字符的檢查當(dāng)前字符是不是''\n''或''\r\n'').這個在存儲轉(zhuǎn)換在Linux操作系統(tǒng)中并不需要,當(dāng)然,當(dāng)在兩個不同的操作系統(tǒng)上共享文件時,這種存儲轉(zhuǎn)換又可能出來
使用二進(jìn)制文件的好處編輯
為什么要使用二進(jìn)制文件。原因大概有三個:第一是二進(jìn)制文件比較節(jié)約空間,這兩者儲存字符型數(shù)據(jù)時并沒有差別。但是在儲存數(shù)字,特別是實型數(shù)字時,二進(jìn)制更節(jié)省空間,比如儲存 Real*4 的數(shù)據(jù):3.1415927,文本文件需要 9 個字節(jié),分別儲存:3 . 1 4 1 5 9 2 7 這 9 個 ASCII 值,而二進(jìn)制文件只需要 4 個字節(jié)(DB 0F 49 40)
第二個原因是,內(nèi)存中參加計算的數(shù)據(jù)都是用二進(jìn)制無格式儲存起來的,因此,使用二進(jìn)制儲存到文件就更快捷。如果儲存為文本文件,則需要一個轉(zhuǎn)換的過程。在數(shù)據(jù)量很大的時候,兩者就會有明顯的速度差別了。
第三,就是一些比較精確的數(shù)據(jù),使用二進(jìn)制儲存不會造成有效位的丟失。 一、文本文件與二進(jìn)制文件的定義 大家都知道計算機的存儲在物理上是二進(jìn)制的,所以文本文件與二進(jìn)制文件的區(qū)別并不是物理上的,而是邏輯上的。這兩者只是在編碼層次上有差異。簡單來說,文本文件是基于字符編碼的文件,常見的編碼有ASCII編碼,UNICODE編碼等等。二進(jìn)制文件是基于值編碼的文件,你可以根據(jù)具體應(yīng)用,指定某個值是什么意思(這樣一個過程,可以看作是自定義編碼。
從上面可以看出文本文件基本上是定長編碼的(也有非定長的編碼如UTF-8)。而二進(jìn)制文件可看成是變長編碼的,因為是值編碼嘛,多少個比特代表一個值,完全由你決定。大家可能對BMP文件比較熟悉,就拿它舉例子吧,其頭部是較為固定長度的文件頭信息,前2字節(jié)用來記錄文件為BMP格式,接下來的8個字節(jié)用來記錄文件長度,再接下來的4字節(jié)用來記錄bmp文件頭的長度。
二、文本文件與二進(jìn)制文件的存取
文本工具打開一個文件的過程是怎樣的呢?拿記事本來說,它首先讀取文件物理上所對應(yīng)的二進(jìn)制比特流,然后按照你所選擇的解碼方式來解釋這個流,然后將解釋結(jié)果顯示出來。一般來說,你選取的解碼方式會是ASCII碼形式(ASCII碼的一個字符是8個比特),接下來,它8個比特8個比特地來解釋這個文件流。例如對于這么一個文件流"01000000_01000001_01000010_01000011"(下劃線''_'',為了增強可讀性手動添加的),第一個8比特''01000000''按ASCII碼來解碼的話,所對應(yīng)的字符是字符''A'',同理其它3個8比特可分別解碼為''BCD'',即這個文件流可解釋成“ABCD”,然后記事本就將這個“ABCD”顯示在屏幕上。
事實上,世界上任何東西要與其他東西通信會話,都存在一個既定的協(xié)議,既定的編碼。人與人之間通過文字聯(lián)絡(luò),漢字“媽”代表生你的那個人,這就是一種既定的編碼。但注意到這樣一種情況,漢字“媽”在日本文字里有可能是你生下的那個人,所以當(dāng)一個中國人A與日本B之間用“媽”這個字進(jìn)行交流,出現(xiàn)誤解就很正常的。用記事本打開二進(jìn)制文件與上面的情況類似。記事本無論打開什么文件都按既定的字符編碼工作(如ASCII碼),所以當(dāng)他打開二進(jìn)制文件時,出現(xiàn)亂碼也是很必然的一件事情了,解碼和譯碼不對應(yīng)嘛。例如文件流''00000000_00000000_00000000_00000001''可能在二進(jìn)制文件中對應(yīng)的是一個四字節(jié)的整數(shù)int 1,在記事本里解釋就變成了"NULL_NULL_NULL_SOH"這四個控制符。
文本文件的存儲與其讀取基本上是個逆過程。而二進(jìn)制文件的存取顯然與文本文件的存取差不多,只是編/解碼方式不同而已,也不再敘述。
三、文本文件與二進(jìn)制文件的優(yōu)缺點
因為文本文件與二進(jìn)制文件的區(qū)別僅僅是編碼上不同,所以他們的優(yōu)缺點就是編碼的優(yōu)缺點,這個找本編碼的書來看看就比較清楚了。一般認(rèn)為,文本文件編碼基于字符定長,譯碼容易些;二進(jìn)制文件編碼是變長的,所以它靈活,存儲利用率要高些,譯碼難一些(不同的二進(jìn)制文件格式,有不同的譯碼方式)。關(guān)于空間利用率,想想看,二進(jìn)制文件甚至可以用一個比特來代表一個意思(位操作),而文本文件任何一個意思至少是一個字符.
在windows下,文本文件不一定是一ASCII來存貯的,因為ASCII碼只能表示128的標(biāo)識,你打開一個txt文檔,然后另存為,有個選項是編碼,可以選擇存貯格式,一般來說UTF-8編碼格式兼容性要好一些.而二進(jìn)制用的計算機原始語言,不存貯兼容性. 很多書上還認(rèn)為,文本文件的可讀性要好些,存儲要花費轉(zhuǎn)換時間(讀寫要編譯碼),而二進(jìn)制文件可讀性差,存儲不存在轉(zhuǎn)換時間(讀寫不要編解碼,直接寫值).這里的可讀性是從軟件使用者角度來說的,因為我們用通用的記事本工具就幾乎可以瀏覽所有文本文件,所以說文本文件可讀性好;而讀寫一個具體的二進(jìn)制文件需要一個具體的文件解碼器,所以說二進(jìn)制文件可讀性差,比如讀BMP文件,必須用讀圖軟件.
而這里的存儲轉(zhuǎn)換時間應(yīng)該是從編程的角度來說的,因為有些操作系統(tǒng)如windows需要對回車換行符進(jìn)行轉(zhuǎn)換(將''\n'',換成''\r\n'',所以文件讀寫時,操作系統(tǒng)需要一個一個字符的檢查當(dāng)前字符是不是''\n''或''\r\n'').這個在存儲轉(zhuǎn)換在Linux操作系統(tǒng)中并不需要,當(dāng)然,當(dāng)在兩個不同的操作系統(tǒng)上共享文件時,這種存儲轉(zhuǎn)換又可能出來
總結(jié)
以上是生活随笔為你收集整理的文本文件和二进制文件的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: resize和reverse的区别
- 下一篇: windows 安装 zabbix ag