Ich will ein binäres File einlesen, byte für byte.
Machen wollte ich das mit einem FileInputStream, nun fällt mir aber gerade eine etwas unpraktische Gegebenheit mit java auf: der primitive Typ byte geht von -128 bis 127.
Der FileInputStream lieftert mit read() ein int zurück, welches den korrekten Wert enthält.
In meinem Fall ist das 191. Das File kommt aus einem Programm welches eben bytes von 0 bis 255 kennt. Negative Werte würden auch keinen Sinn für den Verwendungszweck machen.
Nun brauche ich aber mehr als ein byte und will read mit einem byte Array verwenden.
Die Methode kränkt offenbar aber an einem Overflow. Ich krieg als Ergebnis logischerweise -65 statt der 191. Das Java byte ist einfach nicht groß genug, bzw ist eben mit vorzeichen :S
Muss ich jetzt das ganze mit dem Overflow einlesen, nur um es dann in einen int Array zu packen ?
Samplecode:
Machen wollte ich das mit einem FileInputStream, nun fällt mir aber gerade eine etwas unpraktische Gegebenheit mit java auf: der primitive Typ byte geht von -128 bis 127.
Der FileInputStream lieftert mit read() ein int zurück, welches den korrekten Wert enthält.
In meinem Fall ist das 191. Das File kommt aus einem Programm welches eben bytes von 0 bis 255 kennt. Negative Werte würden auch keinen Sinn für den Verwendungszweck machen.
Nun brauche ich aber mehr als ein byte und will read mit einem byte Array verwenden.
Die Methode kränkt offenbar aber an einem Overflow. Ich krieg als Ergebnis logischerweise -65 statt der 191. Das Java byte ist einfach nicht groß genug, bzw ist eben mit vorzeichen :S
Muss ich jetzt das ganze mit dem Overflow einlesen, nur um es dann in einen int Array zu packen ?
Samplecode:
Java:
in = new BufferedInputStream(new FileInputStream(customDir + name));
byte b[] = new byte[2];
int count = in.read(b);
IOUtils.safeClose(in);
in = new BufferedInputStream(new FileInputStream(customDir + name));
int b1 = in.read();
int b2 = in.read();
JOptionPane.showMessageDialog(null, "count:" + count + "\\" + b[0] +"\\" +b[1]);
JOptionPane.showMessageDialog(null, b1 +"\\" +b2);
IOUtils.safeClose(in);