Javaではbyte
プリミティブ署名と0xFF
が255
としてintとして解釈されるのに対し、あなたba[0]
が-1
として出てくる意味-128から127までの範囲を有しています。あなたは次のように0xFF
が、これは正しい値と動作しますあなたのコードに符号付きバイトを変換&
演算子を使用してビット単位のANDを行う場合は、次の
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固有のものですので、あなたをM 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