Java では、プリミティブは署名されbyte
ており、範囲は -128 から127です。演算子を使用してビットごとの AND を実行すると、符号付きバイトが正しい値に変換され、次のようにコードが機能します。ba[0]
-1
0xFF
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 固有であるため、これを確認する理由を再確認することをお勧めします。
以下は、ウィキペディアに従ってチェックを行うために使用するコードです。
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");
}