在Java的原始byte
簽署並具有從-128到127的範圍內,這意味着你的ba[0]
出來作爲-1
,而0xFF
被解釋爲一個int 255
。如果你的位與使用0xFF
的&
運營商將其轉換的符號字節到正確的價值和你的代碼將工作,如下所示:
File imgFile =
new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg");
byte[] ba = Files.toByteArray(imgFile); //Its a google guava library
int i = 0;
if((ba [i] & 0xFF) == 0xFF && (ba[i+1] & 0xFF) == 0xD8 && (ba[i+2] & 0xFF) == 0xFF
&& (ba[i+3] & 0xFF) == 0xE0) {
System.out.println("isJPEG");
}
我不知道,但是你正在使用的精確邏輯,維基百科說是幻數爲JPEG格式如下:
JPEG圖像文件開始FF D8與FF D9結束
FF E0
是JFIF具體,所以你米AY要仔細檢查你爲什麼要檢查這個
以下是該代碼使用,使支票按照維基百科:
File imgFile =
new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg");
byte[] ba = Files.toByteArray(imgFile); //Its a google guava library
int i = 0;
if((ba [i] & 0xFF) == 0xFF && (ba[i+1] & 0xFF) == 0xD8 && (ba[ba.length - 2] & 0xFF) == 0xFF
&& (ba[ba.length - 1] & 0xFF) == 0xD9) {
System.out.println("isJPEG");
}
相關:http://stackoverflow.com/q/1915317/1055089 – Vrushank 2013-03-21 09:22:46