F
flostre
Gast
Hi,
ich hab ein Java-Problem, bei dem ich einfach nicht weiterkomme. In einem Parser lese ich die Dateien byteweise ein, mit einem BufferedReader, den ich so erstelle:
reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
Dann rufe ich immer wieder reader.read() auf. Das liefert einen int, der eigentlich den Inhalt eines Bytes darstellen soll. Aber manchmal liefert read() auch Werte, die größer als 255 sind. Und zwar reproduzierbar. Wenn ich Datei in einem Hex-Editor öffne, kann ich die korrekten Werte ermitteln. Ich habe auch schon eine Workaround-Methode geschrieben:
Aber das ist ja keine Dauerlösung. Und außerdem bin ich gerade auf den ersten falschen Wert gestoßen, der kleiner als 255 ist.
Wie kommt es zu diesen falschen Werten und was kann ich dagegen machen?
Danke, flostre
ich hab ein Java-Problem, bei dem ich einfach nicht weiterkomme. In einem Parser lese ich die Dateien byteweise ein, mit einem BufferedReader, den ich so erstelle:
reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
Dann rufe ich immer wieder reader.read() auf. Das liefert einen int, der eigentlich den Inhalt eines Bytes darstellen soll. Aber manchmal liefert read() auch Werte, die größer als 255 sind. Und zwar reproduzierbar. Wenn ich Datei in einem Hex-Editor öffne, kann ich die korrekten Werte ermitteln. Ich habe auch schon eine Workaround-Methode geschrieben:
Code:
private ParseObject parse(BufferedReader reader) {
int value=reader.read();
if(value>255)
value=correctWrongReading(value);
//...
}
private int correctWrongReading(int value) {
if(value==65533)
value=0x90;
else if(value==8216)
value=0x91;
else if(value==8217)
value=0x92;
else if(value==8220)
//hier ist 8220 der Wert, den BufferedReader.read() geliefert hat
value=0x93;
//und 0x93 der korrekte Wert, den ich aus den HexEditor habe
//... (noch mehr solcher Zeilen)
return value;
}
Aber das ist ja keine Dauerlösung. Und außerdem bin ich gerade auf den ersten falschen Wert gestoßen, der kleiner als 255 ist.
Wie kommt es zu diesen falschen Werten und was kann ich dagegen machen?
Danke, flostre