一個數字666,你數數時它代表一個數字,你排隊時它代表一個位置,學號系統裏它代表一個具體的個人,考試時它代表分數或排名,聊天時它可能代表一種「稱讚」,聖經裏它可能代表魔鬼,二進位裏它的表現形式是1010011010,對處理器來說它可能是一個指令也可能是一個數據,一個索引表裡它可能是對應任何東西的鍵值…………

就像一個女人她可能是同學,可能是女朋友,可能是女兒,可能是妻子,可能是媽媽……一個男人,他可能是兄弟,可能是男朋友,可能是「你是個好人」,可能是丈夫,可能是兒子,可能是父親……

所以,一個事物到底代表什麼,除了它本身的固有意義(如一個數字)以外,它的擴展意義完全取決於是誰來解釋和表示這個事物。


計算機所有的文件確實都是二進位數據,然後我們人為的規定了一些格式來說明哪些數據表示文字,哪些數據表示圖片。

拋開現有的各種複雜的格式不談,假如我們現在只有兩種格式,文字和圖片,我們怎麼來區分它們呢?

自己規定一下即可,0 開頭的用來表示文字,1 開頭的表示圖片。然後給一串二進位編碼的數據,只需要檢查開頭的二進位是幾即可。

但現在有各種各樣的數據,僅僅是文字,編碼就有 ASCII , UTF-8UTF-16 等等,之前也寫過一篇字元串編碼的。另外圖片的話,又有 jpg,png,gif 等等。還有視頻,mp4,rmvb 等等。

這麼多格式,我們分別規定了這些格式開頭的數字還有結尾的數字,比如 jpg 圖片格式,如果我們去看它的二進位形式,會發現它是以十六進位 ffd8 開頭,也就是二進位的 1111111111011000 。然後以十六進位的 ffd9 結尾,也就是二進位的 1111 1111 1101 1001

我們隨便打開幾張圖片看一下它的二進位數據,使用 Notepad++,裝一個 HEX-Editor 插件即可。

開始部分

結束部分

其他的格式也是類似,只需要人為的規定怎麼開始,怎麼結束,具體怎麼存儲。

我們規定了太多的格式,我們自己看這些二進位肯定是區分不出它們都是什麼格式了,所以在 windows 平臺增加了後綴名,創建文件的時候加上後綴名就能輔助我們辨別不同格式了。.jpg 表示圖片,.txt 表示文本。

此外展示圖片或者視頻,會有更複雜的結構,每個像素怎麼存,每一幀怎麼存,怎麼顯示出來,都做了規定,然後只需要設計一個應用軟體去解析這些數據,根據設計好的格式去解析,圖片或者視頻就可以展示出來了。

其實說到底,就是設計了某種規定,然後通過這種規定去存儲數據,然後再通過這種規定解析數據即可。每個人都能設計一種自己的格式,然後再給別人提供一個解析這種格式的應用軟體即可。不提供也可以,那麼這種格式就是你自己專屬的,別人永遠也不會知道你到底存了什麼,只能看到一串二進位序列。

再分享一個程序員的浪漫?

我們可以右鍵用文本編輯器打開一張圖片,然後在文本末尾加一句告白的話。

然後保存,發給 TA。

這張圖片還是能正常打開的,但如果用文本編輯器打開就會發現你藏起來的那句話了。

程序員的浪漫


用什麼形式呈現哪一段數據,是由軟體決定的。所以程序員也稱為上帝之手

通常數據存儲在文件中。為了容易區別,文本用.txt後綴,圖片按照不同格式用.bmp、 .jpg、 .gif、.png 等後綴的文件來存儲。

數據存儲之後,讀取的時候程序也不完全確認是什麼數據。雖然後綴已經表明身份,但為加深理解,你可以嘗試一下亂來。

文本是最簡單的數據,幾乎沒有特殊標誌。讀取時,會按照碼錶將數據逐個翻譯成字元。圖片強行讀取為文字可能顯示為亂碼,就像你在語文試捲上塗鴉類似。嘗試一下,你可以用記事本強行打開任何圖片文件,會看到下圖的亂碼。職業開發還會查看二進位和格式手冊,做進一步分析。

文件頭的NG表示PNG格式,還有其他標誌隱藏其中

而文字無法解析為圖片,因為圖片有更複雜的特定格式,在開始就會被發現是個西貝。就像你美術課交一篇作文,老師會直接讓你爆頭。

畫圖無法打開txt文件

在字典上來看都是一個個字,有的就是一首詩,有的是一部小說,你說是為什麼呢?

磚頭都是一樣的,怎麼有的蓋座大廈,有的蓋座廁所?

從計算機內部來看,都是一堆0/1代碼,有的數據是文字,有的是圖片,還有的呢?不知道,不認識,不確定。

按照圖紙施工,你可以蓋個大廈,也可以蓋個廁所

按照規定的格式存儲,你就可以寫成文字,寫成圖片

沒有規定的格式,你就會得到『未知類型』

規定的格式被破壞,你也會得到位置類型,你刪錯過什麼文件沒有?有沒有看到過損壞的文件顯示『未知類型』?

一切皆文件!

素質三連,謝謝!


是打開它的軟體決定的。比如用文本工具打開一個是全是010101的文件,那麼就會用"文本公式"去解讀這些二進位,如果用圖片瀏覽工具去打開這個文件,就會用"圖片公式"去解度這些二進位。

如果工具解讀二進位時,發現裡面的二進位不符合自己的解析"公式",就會亂碼或打不開報錯。

體現在數據存儲的底層,會在每種類型的文件里加上一點"提示",比如想保存為圖片文件,就會在文件最開始的一段位置打一個所有圖片工具都識別的標記"這是一個圖片",於是圖片工具就能夠用圖片"公式"去解析這個文件。


推薦閱讀:
相關文章