文本文件和二進(jìn)制文件的區(qū)別有哪些

這篇文章主要介紹文本文件和二進(jìn)制文件的區(qū)別有哪些,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺(tái)小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了淮安區(qū)免費(fèi)建站歡迎大家使用!

文本文件和二進(jìn)制文件區(qū)別:1、文本文件是基于字符編碼的文件,常見的編碼有ASCII編碼,UNICODE編碼等;2、二進(jìn)制文件是基于值編碼的文件

文本文件和二進(jìn)制文件區(qū)別:

一、文本文件與二進(jìn)制文件的定義

大家都知道計(jì)算機(jī)的存儲(chǔ)在物理上是二進(jìn)制的,所以文本文件與二進(jìn)制文件的區(qū)別并不是物理上的,而是邏輯上的。這兩者只是在編碼層次上有差異。

簡(jiǎn)單來說,文本文件是基于字符編碼的文件,常見的編碼有ASCII編碼,UNICODE編碼等等。二進(jìn)制文件是基于值編碼的文件,你可以根據(jù)具體應(yīng)用,指定某個(gè)值是什么意思(這樣一個(gè)過程,可以看作是自定義編碼)。

從上面可以看出文本文件基本上是定長(zhǎng)編碼的,基于字符嘛,每個(gè)字符在具體編碼中是固定的,ASCII碼是8個(gè)比特的編碼,UNICODE一般占16個(gè)比特。而二進(jìn)制文件可看成是變長(zhǎng)編碼的,因?yàn)槭侵稻幋a嘛,多少個(gè)比特代表一個(gè)值,完全由你決定。大家可能對(duì)BMP文件比較熟悉,就拿它舉例子吧,其頭部是較為固定長(zhǎng)度的文件頭信息,前2字節(jié)用來記錄文件為BMP格式,接下來的8個(gè)字節(jié)用來記錄文件長(zhǎng)度,再接下來的4字節(jié)用來記錄bmp文件頭的長(zhǎng)度。。。大家可以看出來了吧,其編碼是基于值的(不定長(zhǎng)的,2、4、8字節(jié)長(zhǎng)的值都有),所以BMP是二進(jìn)制文件。

二、文本文件與二進(jìn)制文件的存取

文本工具打開一個(gè)文件的過程是怎樣的呢?拿記事本來說,它首先讀取文件物理上所對(duì)應(yīng)的二進(jìn)制比特流(前面已經(jīng)說了,存儲(chǔ)都是二進(jìn)制的),然后按照你所選擇的解碼方式來解釋這個(gè)流,然后將解釋結(jié)果顯示出來。一般來說,你選取的解碼方式會(huì)是ASCII碼形式(ASCII碼的一個(gè)字符是8?jìng)€(gè)比特),接下來,它8個(gè)比特8個(gè)比特地來解釋這個(gè)文件流。例如對(duì)于這么一個(gè)文件流"01000000_01000001_01000010_01000011"(下劃線'_',是我為了增強(qiáng)可讀性,而手動(dòng)添加的),第一個(gè)8比特'01000000'按ASCII碼來解碼的話,所對(duì)應(yīng)的字符是字符'A',同理其它3個(gè)8比特可分別解碼為'BCD',即這個(gè)文件流可解釋成“ABCD”,然后記事本就將這個(gè)“ABCD”顯示在屏幕上。

事實(shí)上,世界上任何東西要與其他東西通信會(huì)話,都存在一個(gè)既定的協(xié)議,既定的編碼。人與人之間通過文字聯(lián)絡(luò),漢字“媽”代表生你的那個(gè)人,這就是一種既定的編碼。但注意到這樣一種情況,漢字“媽”在日本文字里有可能是你生下的那個(gè)人,所以當(dāng)一個(gè)中國(guó)人A與日本B之間用“媽”這個(gè)字進(jìn)行交流,出現(xiàn)誤解就很正常的。用記事本打開二進(jìn)制文件與上面的情況類似。記事本無論打開什么文件都按既定的字符編碼工作(如ASCII碼),所以當(dāng)他打開二進(jìn)制文件時(shí),出現(xiàn)亂碼也是很必然的一件事情了,解碼和譯碼不對(duì)應(yīng)嘛。例如文件流'00000000_00000000_00000000_00000001'可能在二進(jìn)制文件中對(duì)應(yīng)的是一個(gè)四字節(jié)的整數(shù)int1,在記事本里解釋就變成了"NULL_NULL_NULL_SOH"這四個(gè)控制符。

文本文件的存儲(chǔ)與其讀取基本上是個(gè)逆過程,不再累述。而二進(jìn)制文件的存取顯然與文本文件的存取差不多,只是編/解碼方式不同而已,也不再敘述。

三、文本文件與二進(jìn)制文件的優(yōu)缺點(diǎn)

因?yàn)槲谋疚募c二進(jìn)制文件的區(qū)別僅僅是編碼上不同,所以他們的優(yōu)缺點(diǎn)就是編碼的優(yōu)缺點(diǎn),這個(gè)找本編碼的書來看看就比較清楚了。一般認(rèn)為,文本文件編碼基于字符定長(zhǎng),譯碼容易些;二進(jìn)制文件編碼是變長(zhǎng)的,所以它靈活,存儲(chǔ)利用率要高些,譯碼難一些(不同的二進(jìn)制文件格式,有不同的譯碼方式)。關(guān)于空間利用率,想想看,二進(jìn)制文件甚至可以用一個(gè)比特來代表一個(gè)意思(位操作),而文本文件任何一個(gè)意思至少是一個(gè)字符.

很多書上還認(rèn)為,文本文件的可讀性要好些,存儲(chǔ)要花費(fèi)轉(zhuǎn)換時(shí)間(讀寫要編譯碼),而二進(jìn)制文件可讀性差,存儲(chǔ)不存在轉(zhuǎn)換時(shí)間(讀寫不要編解碼,直接寫值).這里的可讀性是從軟件使用者角度來說的,因?yàn)槲覀冇猛ㄓ玫挠浭卤竟ぞ呔蛶缀蹩梢詾g覽所有文本文件,所以說文本文件可讀性好;而讀寫一個(gè)具體的二進(jìn)制文件需要一個(gè)具體的文件解碼器,所以說二進(jìn)制文件可讀性差,比如讀BMP文件,必須用讀圖軟件.而這里的存儲(chǔ)轉(zhuǎn)換時(shí)間應(yīng)該是從編程的角度來說的,因?yàn)橛行┎僮飨到y(tǒng)如windows需要對(duì)回車換行符進(jìn)行轉(zhuǎn)換(將'\n',換成'\r\n',所以文件讀寫時(shí),操作系統(tǒng)需要一個(gè)一個(gè)字符的檢查當(dāng)前字符是不是'\n'或'\r\n').這個(gè)在存儲(chǔ)轉(zhuǎn)換在Linux操作系統(tǒng)中并不需要,當(dāng)然,當(dāng)在兩個(gè)不同的操作系統(tǒng)上共享文件時(shí),這種存儲(chǔ)轉(zhuǎn)換又可能出來(如Linux系統(tǒng)和Windows系統(tǒng)共享文本文件)。關(guān)于這個(gè)轉(zhuǎn)換怎樣進(jìn)行,我將在下一篇文章《Linux文本文件與Windows文本文件間的轉(zhuǎn)換》給出^_^

四、C的文本讀寫和二進(jìn)制讀寫

應(yīng)該說C的文本讀寫與二進(jìn)制的讀寫是一個(gè)編程層次上的問題,與具體的操作系統(tǒng)有關(guān),所以"用文本方式讀寫的文件一定是文本文件,用二進(jìn)制讀寫的文件一定是二進(jìn)制文件"這類觀點(diǎn)是錯(cuò)誤的.下面的講述非明確指出操作系統(tǒng)類型,都暗指windows.C的文本方讀寫與二進(jìn)制讀寫的差別僅僅體現(xiàn)在回車換行符的處理上.文本方式寫時(shí),每遇到一個(gè)'\n'(0AH換行符),它將其換成'\r\n'(0D0AH,回車換行),然后再寫入文件;當(dāng)文本讀取時(shí),它每遇到一個(gè)'\r\n'將其反變化為'\n',然后送到讀緩沖區(qū).正因?yàn)槲谋痉绞接?#39;\n'--'\r\n'之間的轉(zhuǎn)換,其存在轉(zhuǎn)換耗時(shí).二進(jìn)制讀寫時(shí),其不存在任何轉(zhuǎn)換,直接將寫緩沖區(qū)中數(shù)據(jù)寫入文件.

總地來說,從編程的角度來說,C中文本或二進(jìn)制讀寫都是緩沖區(qū)與文件中二進(jìn)制流的交互,只是文本讀寫時(shí)有回車換行的轉(zhuǎn)換.所以當(dāng)寫緩沖區(qū)中無換行符'\n'(0AH),文本寫與二進(jìn)制寫的結(jié)果是一樣的,同理,當(dāng)文件中不存在'\r\n'(0DH0AH)時(shí),文本讀與二進(jìn)制讀的結(jié)果一樣.

以上是“文本文件和二進(jìn)制文件的區(qū)別有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享名稱:文本文件和二進(jìn)制文件的區(qū)別有哪些
文章鏈接:http://muchs.cn/article40/jojdeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、網(wǎng)站排名關(guān)鍵詞優(yōu)化、虛擬主機(jī)、微信小程序、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化