java magic number_Magic Number
今天重學(xué)java的時(shí)候了解了magic number的相關(guān)內(nèi)容
以前不知道是啥,現(xiàn)在將他的大概意思寫(xiě)下來(lái)記錄一下
通常有兩種情況
1.在代碼中直接使用到了某個(gè)數(shù)值
int duration=1000;int animDuration=1000*0.618;
如果沒(méi)有注釋說(shuō)明,0.618這個(gè)黃金分割數(shù)值就用的很魔幻,導(dǎo)致代碼可讀性差,修改不方便的問(wèn)題。
int duration=1000;int animHideDuration=1000*0.618;int animShowDuration=2000*0.618;
同樣的特定數(shù)值出現(xiàn)多次應(yīng)該將其定義為常量
int duration=1000;private static final int GOLDEN_SECTION=0.618;int animHideDuration=1000*GOLDEN_SECTION;int animShowDuration=2000*GOLDEN_SECTION;
2.用來(lái)標(biāo)志文件的特性
一個(gè)文件里面的內(nèi)容到底是啥?單純的Windows用戶一般是看后綴。但是后綴這個(gè)東西說(shuō)改就改,不可靠。所以,最保險(xiǎn)的還是把文件類型信息寫(xiě)到文件里面,通常來(lái)說(shuō),也就是寫(xiě)到文件開(kāi)頭的那幾個(gè)字節(jié)。這也是現(xiàn)在最方便,最快捷的用來(lái)辨別一個(gè)文件真實(shí)內(nèi)容的方法。這個(gè)運(yùn)用是特別廣泛的,常見(jiàn)的比如
1、Java class文件的魔數(shù)
每一個(gè)Java Class文件都是以0x CAFEBABE開(kāi)頭的。我們直接打開(kāi)一個(gè)class文件
2、文本文件的BOM
比如說(shuō),對(duì)于文本文件,開(kāi)頭的幾個(gè)字節(jié)可以叫做BOM(Byte Order Mark),它的作用是用來(lái)標(biāo)記文本文件內(nèi)部是用的哪種Unicode編碼,以及其字節(jié)碼順序。UTF-8,UTF-16BE,UTF-16LE等等各種Unicode編碼都有自己獨(dú)一無(wú)二的BOM。一般的文本編輯器也都支持 BOM。這樣就不會(huì)出現(xiàn)亂碼了。
5、FreeBSD 上 ELF 文件的 magic number 就是文件的前四個(gè)字節(jié)依次為"7f 45 4c 46",對(duì)應(yīng)的ascii字符串即 "^?ELF"。
6、tar 文件的 magic number 是從第257個(gè)字節(jié)起為 "ustar"。
7、PE文件中,在DOS-根之后是一個(gè)32位的簽名以及魔數(shù)0x00004550 (IMAGE_NT_SIGNATURE)(意為“NT簽名”,也就是PE簽名;十六進(jìn)制數(shù)45和50分別代表ASCII碼字母P和E,它使任何PE文件都是一個(gè)有效的MS-DOS可執(zhí)行文件。等等
一般而言,硬盤(pán)數(shù)據(jù)恢復(fù)軟件(如 EasyRecovery),就是靠分析磁盤(pán)上的原始數(shù)據(jù),然后根據(jù)文件幻數(shù)來(lái)試圖匹配文件格式,從而嘗試識(shí)別出磁盤(pán)中那些已經(jīng)從文件系統(tǒng)登記表中刪除的文件(真實(shí)的文件內(nèi)容可能沒(méi)有被覆蓋)。但是這種方法不是100%精確,因?yàn)榇疟P(pán)中數(shù)據(jù)的隨機(jī)性也很大,很多沒(méi)有意義的字符串,可能被誤認(rèn)為是有效的幻數(shù),從而造成回復(fù)出無(wú)效/錯(cuò)誤的文件。(可以在EasyRecovery中自己定義文件的幻數(shù)然后讓它幫你回復(fù),不過(guò)常用的文件格式它都有記錄)
通常在應(yīng)用開(kāi)發(fā)中,文件讀寫(xiě)也可能使用文件的幻數(shù)。例如讀取文件時(shí),用它來(lái)判斷文件的格式是否匹配.如果不匹配則報(bào)告錯(cuò)誤不處理文件,或者嘗試讀取文件的幻數(shù)標(biāo)記來(lái)識(shí)別。常見(jiàn)的例子。例如,把一個(gè)bmp圖像文件的擴(kuò)展名改名為png,可能有些圖像瀏覽/編輯軟件提示:類型錯(cuò)誤,加載失敗,但是有的軟件卻可以識(shí)別并讀出,并提示格式跟擴(kuò)展名不匹配。
所以我們可以推測(cè)命令 "file" 應(yīng)該就是利用這個(gè)原理工作的。
總結(jié)
以上是生活随笔為你收集整理的java magic number_Magic Number的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python百度翻译包_python百度
- 下一篇: java io nio aio_Java