In Java die byte
primitive unterzeichnet und hat eine Reichweite von -128 bis 127, was bedeutet, Ihre ba[0]
als -1
kommt, während 0xFF
als int als 255
interpretiert wird. Wenn Sie eine bitweise tun und mit 0xFF
mit dem &
Operator dies das signierte Byte auf den richtigen Wert und Ihr Code funktioniert wandelt, wie folgt:
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");
}
Ich bin mir nicht sicher über die genaue Logik, die Sie jedoch verwenden , wie wikipedia heißt es, dass die magischen Zahlen für JPEGs sind wie folgt:
JPEG-Bilddateien beginnen mit FF D8 und enden mit FF D9
FF E0
ist JFIF spezifisch, so dass Sie m ay wollen überprüfen, verdoppeln, warum Sie sich für diese
Das sind die Überprüfung folgende würde den Code zu verwenden, um die Kontrollen zu machen, wie pro Wikipedia:
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");
}
Verwandte: http://stackoverflow.com/q/1915317/1055089 – Vrushank