文本文件和二進制文件的差異和區(qū)別

廣義上的二進制文件包括文本文件熊经,這里討論的是狹義上的二進制文件與文本文件的比較

1. 能存儲的數(shù)據(jù)類型不同

文本文件只能存儲char型字符變量。二進制文件可以存儲char/int/short/long/float/……各種變量值匹涮。

2. 每條數(shù)據(jù)的長度

文本文件每條數(shù)據(jù)通常是固定長度的然低。以ASCII為例务唐,每條數(shù)據(jù)(每個字符)都是1個字節(jié)枫笛。進制文件每條數(shù)據(jù)不固定。如short占兩個字節(jié)喧兄,int占四個字節(jié)吠冤,float占8個字節(jié)……

3. 讀取的軟件不同

文本文件編輯器就可以讀寫恭理。比如記事本蚯斯、NotePad++、Vim等遭赂。二進制文件需要特別的解碼器撇他。比如bmp文件需要圖像查看器困肩,rmvb需要播放器……

4. 操作系統(tǒng)對換行符('\n')的處理不同(不重要)

文本文件脆侮,操作系統(tǒng)會對'\n'進行一些隱式變換靖避,因此文本文件直接跨平臺使用會出問題比默。

在Windows下命咐,寫入'\n'時醋奠,操作系統(tǒng)會隱式的將'\n'轉(zhuǎn)換為"\r\n"伊佃,再寫入到文件中锭魔;讀的時候,會把“\r\n”隱式轉(zhuǎn)化為'\n',再讀到變量中漠秋。

在Linux下庆锦,寫入'\n'時轧葛,操作系統(tǒng)不做隱式變換尿扯。

二進制文件衷笋,操作系統(tǒng)不會對'\n'進行隱式變換,很多二進制文件(如電影爵赵、圖片等)可以跨平臺使用空幻。


從存儲方式來說容客,文件在磁盤上的存儲方式都是二進制形式,所以棍现,文本文件其實也應(yīng)該算二進制文件镜遣。先從他們的區(qū)別來說悲关,雖然都是二進制文件寓辱,但是二進制代表的意思不一樣秫筏。打個比方,一個人航夺,我們可以叫他的大名,可以叫他的小名崔涂,但其實都是代表這個人阳掐。二進制讀寫是將內(nèi)存里面的數(shù)據(jù)直接讀寫入文本中,而文本呢冷蚂,則是將數(shù)據(jù)先轉(zhuǎn)換成了字符串缭保,再寫入到文本中。

要弄明白二者的區(qū)別蝙茶,需要知道文件的讀寫過程艺骂。以讀文件為例

實際上是磁盤 》》 文件緩沖區(qū)》》應(yīng)用程序內(nèi)存空間這兩個轉(zhuǎn)化過程彻亲。我們說“文本文件和二進制文件沒有區(qū)別”,實際上針對的是第一個過程吮廉;既然沒有區(qū)別苞尝,那么打開方式不同,為何顯示內(nèi)容就不同呢宦芦?這個區(qū)別實際上是第二個過程造成的宙址。

文件實際上包括兩部分,控制信息和內(nèi)容信息调卑。純文本文件僅僅是沒有控制格式信息罷了抡砂;

實際上也是一種特殊的二進制文件大咱。所以,我們很難區(qū)分二者的不同注益,因為他們的概念上不是完全互斥的碴巾。我們說文本文件是特殊的二進制文件,是因為文本文件實際上的解釋格式已經(jīng)確定了:ASCII或者unicode編碼丑搔。文本文件的一個缺點是厦瓢,它的熵往往較低,也就是說啤月,其實本可以用更小的存儲空間記錄這些信息煮仇。比如,文本文件中的一個數(shù)字65536谎仲,需要用5個字節(jié)來存儲浙垫;但是用二進制格式,采用int存儲郑诺,僅僅需要2個字節(jié)夹姥。而二進制文件elf和bmp等,都往往有一個head辙诞,告訴你文件信息和解釋方式佃声。

記事本支持文本文件而不支持二進制文件,所以如果你用記事本打開文本文件那么一切正常倘要,如果打開的是二進制文件就會出現(xiàn)亂碼。但也有不亂碼的地方十拣,你會注意到那些地方都是字符編碼的封拧,而對于int、double等類型所對應(yīng)的值都是亂碼的夭问,這是由于記事本只能夠識別字符類型泽西,而無法識別其他類型。

1缰趋、二進制文件是把內(nèi)存中的數(shù)據(jù)按其在內(nèi)存中的存儲形式原樣輸出到磁盤上存放捧杉,也就是說存放的是數(shù)據(jù)的原形式。

2秘血、文本文件是把數(shù)據(jù)的終端形式的二進制數(shù)據(jù)輸出到磁盤上存放味抖,也就是說存放的是數(shù)據(jù)的終端形式。

字符數(shù)據(jù)本身在內(nèi)存中就經(jīng)過了編碼灰粮,所以無論是二進制還是文本形式都是一樣的仔涩,而對于非字符數(shù)據(jù)來說,例如inti=10粘舟;如果用二進制來進行存儲的話為1010熔脂,但是如果需要用文本形式來進行存儲的話就必須進行格式化編碼(對1和0分別編碼佩研,即形式為‘1’和‘0’分別對應(yīng)的碼值)。



一霞揉、文本文件與二進制文件的定義

大家都知道計算機的存儲在物理上是二進制的旬薯,所以文本文件與二進制文件的區(qū)別并不是物理上的,而是邏輯上的适秩。這兩者只是在編碼層次上有差異绊序。簡單來說,文本文件是基于字符編碼的文件隶症,常見的編碼有ASCII編碼政模,UNICODE編碼等等。二進制文件是基于值編碼的文件蚂会,你可以根據(jù)具體應(yīng)用淋样,指定某個值是什么意思(這樣一個過程,可以看作是自定義編碼胁住。

從上面可以看出文本文件基本上是定長編碼的(也有非定長的編碼如UTF-8)趁猴。而二進制文件可看成是變長編碼的,因為是值編碼嘛彪见,多少個比特代表一個值儡司,完全由你決定。大家可能對BMP文件比較熟悉余指,就拿它舉例子吧捕犬,其頭部是較為固定長度的文件頭信息,前2字節(jié)用來記錄文件為BMP格式酵镜,接下來的8個字節(jié)用來記錄文件長度碉碉,再接下來的4字節(jié)用來記錄bmp文件頭的長度。

二淮韭、文本文件與二進制文件的存取

文本工具打開一個文件的過程是怎樣的呢垢粮?拿記事本來說,它首先讀取文件物理上所對應(yīng)的二進制比特流靠粪,然后按照你所選擇的解碼方式來解釋這個流蜡吧,然后將解釋結(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之間用“媽”這個字進行交流净宵,出現(xiàn)誤解就很正常的。用記事本打開二進制文件與上面的情況類似裹纳。記事本無論打開什么文件都按既定的字符編碼工作(如ASCII碼)择葡,所以當(dāng)他打開二進制文件時,出現(xiàn)亂碼也是很必然的一件事情了剃氧,解碼和譯碼不對應(yīng)嘛敏储。例如文件流''00000000_00000000_00000000_00000001''可能在二進制文件中對應(yīng)的是一個四字節(jié)的整數(shù)int 1,在記事本里解釋就變成了"NULL_NULL_NULL_SOH"這四個控制符朋鞍。

文本文件的存儲與其讀取基本上是個逆過程已添。而二進制文件的存取顯然與文本文件的存取差不多,只是編/解碼方式不同而已滥酥。

三酝碳、文本文件與二進制文件的優(yōu)缺點

因為文本文件與二進制文件的區(qū)別僅僅是編碼上不同,所以他們的優(yōu)缺點就是編碼的優(yōu)缺點恨狈,這個找本編碼的書來看看就比較清楚了。一般認為呛讲,文本文件編碼基于字符定長禾怠,譯碼容易些;二進制文件編碼是變長的贝搁,所以它靈活吗氏,存儲利用率要高些,譯碼難一些(不同的二進制文件格式雷逆,有不同的譯碼方式)弦讽。關(guān)于空間利用率,想想看,二進制文件甚至可以用一個比特來代表一個意思(位操作)往产,而文本文件任何一個意思至少是一個字符被碗。

在windows下,文本文件不一定是一ASCII來存貯的,因為ASCII碼只能表示128的標識,你打開一個txt文檔,然后另存為,有個選項是編碼,可以選擇存貯格式,一般來說UTF-8編碼格式兼容性要好一些.而二進制用的計算機原始語言,不存貯兼容性.? ? 很多書上還認為,文本文件的可讀性要好些仿村,存儲要花費轉(zhuǎn)換時間(讀寫要編譯碼)锐朴,而二進制文件可讀性差,存儲不存在轉(zhuǎn)換時間(讀寫不要編解碼蔼囊,直接寫值).這里的可讀性是從軟件使用者角度來說的焚志,因為我們用通用的記事本工具就幾乎可以瀏覽所有文本文件,所以說文本文件可讀性好畏鼓;而讀寫一個具體的二進制文件需要一個具體的文件解碼器酱酬,所以說二進制文件可讀性差,比如讀BMP文件云矫,必須用讀圖軟件膳沽。

而這里的存儲轉(zhuǎn)換時間應(yīng)該是從編程的角度來說的,因為有些操作系統(tǒng)如windows需要對回車換行符進行轉(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é)構(gòu)又屬于流式文件爷肝。

特別的是呻此,文本文件是指以ASCII碼方式(也稱文本方式)存儲的文件事扭,更確切地說虏束,英文啤斗、數(shù)字等字符存儲的是ASCII碼表箭,而漢字存儲的是機內(nèi)碼。文本文件中除了存儲文件有效字符信息(包括能用ASCII碼字符表示的回車钮莲、換行等信息)外免钻,不能存儲其他任何信息。

文本文件是一種由若干行字符構(gòu)成的計算機文件崔拥。文本文件存在于計算機文件系統(tǒng)中极舔。通常,通過在文本文件最后一行后放置文件結(jié)束標志來指明文件的結(jié)束链瓦。文本文件是指一種容器拆魏,而純文本是指一種內(nèi)容。文本文件可以包含純文本。一般來說渤刃,計算機文件可以分為兩類:文本文件和二進制文件拥峦。

只含有ASCII字符的文本文件可以在UnixMacintosh溪掀、Microsoft Windows事镣、DOS和其它操作系統(tǒng)之間自由交互,而其它格式的文件是很難做到這一點的揪胃。但是璃哟,在這些操作系統(tǒng)中,換行符并不相同喊递,處理非ASCII字符的方式也不一致随闪。

.txt是包含極少格式信息的文字文件的擴展名。.txt格式并沒有明確的定義骚勘,它通常是指那些能夠被系統(tǒng)終端或者簡單的文本編輯器接受的格式铐伴。任何能讀取文字的程序都能讀取帶有.txt擴展名的文件,因此俏讹,通常認為這種文件是通用的当宴、跨平臺的。

在英文文本文件中泽疆,ASCII字符集是最為常見的格式户矢,而且在許多場合,它也是默認的格式殉疼。對于帶重音符號的和其它的非ASCII字符梯浪,必須選擇一種字符編碼。在很多系統(tǒng)中瓢娜,字符編碼是由計算機的區(qū)域設(shè)置決定的挂洛。常見的字符編碼包括支持許多歐洲語言的ISO 8859-1。

由于許多編碼只能表達有限的字符眠砾,通常它們只能用于表達幾種語言虏劲。Unicode制定了一種試圖能夠表達所有已知語言的標準,Unicode字符集非常大褒颈,它囊括了大多數(shù)已知的字符集伙单。Unicode有多種字符編碼,其中最常見的是UTF-8哈肖,這種編碼能夠向后兼容ASCII,相同內(nèi)容的的ASCII文本文件和UTF-8文本文件完全一致念秧。

微軟的MS-DOS和Windows采用了相同的文本文件格式淤井,它們都使用CR和LF兩個字符作為換行符,這兩個字符對應(yīng)的ASCII碼分別為13和10。通常币狠,最后一行文本并不以換行符(CR-LF標志)結(jié)尾游两,包括記事本在內(nèi)的很多文本編輯器也不在文件的最后添加換行符

大多數(shù)Windows文本文件使用ANSI漩绵、OEM或者Unicode編碼贱案。Windows所指的ANSI編碼通常是1字節(jié)的ISO-8859編碼,不過對于像中文止吐、日文宝踪、朝鮮文這樣的環(huán)境,需要使用2字節(jié)字符集碍扔。在過渡至Unicode前瘩燥,Windows一直用ANSI作為系統(tǒng)默認的編碼。而OEM編碼不同,也是通常所說的MS-DOS代碼頁厉膀,是IBM為早期IBM個人電腦的文本模式顯示系統(tǒng)定義的。在全屏的MS-DOS程序中同時使用了圖形的和按行繪制的字符二拐。新版本的Windows可以使用UTF-16LE和UTF-8之類的Unicode編碼服鹅。


由于結(jié)構(gòu)簡單,文本文件被廣泛用于記錄信息百新。它能夠避免其它文件格式遇到的一些問題企软。此外,當(dāng)文本文件中的部分信息出現(xiàn)錯誤時吟孙,往往能夠比較容易的從錯誤中恢復(fù)出來澜倦,并繼續(xù)處理其余的內(nèi)容。文本文件的一個缺點是杰妓,它的往往較低藻治,也就是說,可以用較小的存儲空間記錄這些信息巷挥。

文本文件基本上是定長編碼的(也有非定長的編碼如UTF-8)桩卵,基于字符,每個字符在具體編碼中是固定的倍宾,ASCII碼是8個比特的編碼雏节,UNICODE一般占16個比特。而二進制文件可看成是變長編碼的高职,因為是值編碼钩乍,多少個比特代表一個值,完全由自己決定怔锌。

廣義的二進制文件即指文件寥粹,由文件在外部設(shè)備的存放形式為二進制而得名变过。狹義的二進制文件即除文本文件以外的文件。

每個字符由一個或多個字節(jié)組成涝涤,每個字節(jié)都是用的-128—127之間的部分數(shù)值來表示的媚狰,也就是說,-128——127之間還有一些數(shù)據(jù)沒有對應(yīng)任何字符的任何字節(jié)阔拳。如果一個文件中的每個字節(jié)的內(nèi)容都是可以表示成字符的數(shù)據(jù)崭孤,我們就可以稱這個文件為文本文件。文本文件只是二進制文件中的一種特例糊肠,為了與文本文件相區(qū)別辨宠,人們又把除了文本文件以外的文件稱為二進制文件,由于很難嚴格區(qū)分文本文件和二進制文件的概念罪针,所以我們可以簡單地認為彭羹,如果一個文件專門用于存儲文本字符的數(shù)據(jù),沒有包含字符以外的其他數(shù)據(jù)泪酱,我們就稱之為文本文件派殷,除此之外的文件就是二進制文件。

為什么要使用二進制文件墓阀。原因大概有三個:

第一是二進制文件比較節(jié)約空間毡惜,這兩者儲存字符型數(shù)據(jù)時并沒有差別。但是在儲存數(shù)字斯撮,特別是實型數(shù)字時经伙,二進制更節(jié)省空間;第二個原因是勿锅,內(nèi)存中參加計算的數(shù)據(jù)都是用二進制無格式儲存起來的帕膜,因此,使用二進制儲存到文件就更快捷溢十。如果儲存為文本文件垮刹,則需要一個轉(zhuǎn)換的過程。在數(shù)據(jù)量很大的時候张弛,兩者就會有明顯的速度差別了荒典。第三,就是一些比較精確的數(shù)據(jù)吞鸭,使用二進制儲存不會造成有效位的丟失寺董。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市刻剥,隨后出現(xiàn)的幾起案子遮咖,更是在濱河造成了極大的恐慌,老刑警劉巖造虏,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件御吞,死亡現(xiàn)場離奇詭異踢械,居然都是意外死亡,警方通過查閱死者的電腦和手機魄藕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撵术,“玉大人背率,你說我怎么就攤上這事∧塾耄” “怎么了寝姿?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長划滋。 經(jīng)常有香客問我饵筑,道長,這世上最難降的妖魔是什么处坪? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任根资,我火速辦了婚禮,結(jié)果婚禮上同窘,老公的妹妹穿的比我還像新娘玄帕。我一直安慰自己,他們只是感情好想邦,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布裤纹。 她就那樣靜靜地躺著,像睡著了一般丧没。 火紅的嫁衣襯著肌膚如雪鹰椒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天呕童,我揣著相機與錄音漆际,去河邊找鬼。 笑死拉庵,一個胖子當(dāng)著我的面吹牛灿椅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钞支,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼茫蛹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了烁挟?” 一聲冷哼從身側(cè)響起婴洼,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撼嗓,沒想到半個月后柬采,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欢唾,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年粉捻,在試婚紗的時候發(fā)現(xiàn)自己被綠了礁遣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡肩刃,死狀恐怖祟霍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盈包,我是刑警寧澤沸呐,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站呢燥,受9級特大地震影響崭添,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叛氨,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一呼渣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧力试,春花似錦徙邻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至怖糊,卻和暖如春帅容,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伍伤。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工并徘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扰魂。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓麦乞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親劝评。 傳聞我的和親對象是個殘疾皇子姐直,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容