Problem: FileInputstream liest falsche Werte ein

danielandross

Erfahrenes Mitglied
Hallo,
mein Programm soll aus einem Stream lesen (FileInputstream) bei manchen Zahlen liest er sie richtig ein aber die Zahlen über 7E werden als negative Zahlen in meinem ByteArray gespeichert.z.B. liest er statt 0xFF(also 255 in Dez) ein -1 in das ByteArray, ander Zahlen wie 0x10 (also 16 in Dez) werden aber korrekt eingelesen, daher weiß ich als newbie nicht wo der Fehler leigt. Hier mal mein Code:
Code:
			File finput = new File("d:\\3.JPG");
			FileInputStream fis = new FileInputStream(finput);		
			byte[] array = new byte[8];
			fis.read(array);

Vielleicht wisst ihr was ich falsch mache?
 
Das liegt einfach daran, dass in java ein byte von -128 bis +127 geht (also (2^8)-1). Daher ist ein FF auch -1. Weil ein Bit für das Vorzeichen herhält. Am besten schreibst du das ausgelesen wieder aus und überprüfst es mit dem original.

Aber der Hex und binäre Wert bleibt gleich..es sind nur unterschiedlich Interpretationen
 
Zuletzt bearbeitet:
Hallo,
ist deine Datei eine Binäre Dateie oder eine Textdatei?
Falls dies eine Textdatei ist kannst du natürlich nicht so arbeiten, denn diese ist ja in Ascii oder anderes Encoding codiert.

Da müsstest du dir einen Parser schreiben bzw. gibt es vll. schon so etwas?

Lg, Yanick
 
hm, ok ich änder das jetzt und lese es mit read() ein dann bekomme ich nen schönen sauberen int.
danke

edit: es geht um ein jpg für das ich eine fileerkennung baue.
 
Also wenn ein JPEG eine textdatei ist....oO

Selbst wenn es eine Textdatei wäre, wäre es auch nicht so kritisch. Im Zweifelfall:

new String(byte[]) //benutzt charset des systems ansonsten
new String(byte[], charsetName) //Name nachzulesen in java api
 
Zurück