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