FileInputStream read() Overflow Problem

Cola_Colin

Top Contributor
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:
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);
 

Marco13

Top Contributor
Das konkrete Problem ist nicht so ganz deutlich geworden. Du liest irgendwelche bytes, und in Binärdarstellung ist so ein byte z.B. 11001010. Das ist erstmal keine negative Zahl, sondern einfach ein Bitmuster, das keine inhärente Bedeutung hat. Falls du mit diesen bytes rechnen willst, musst du aufpassen, aber ansonsten kannst du diesen "Overflow" einfach ignorieren....:bahnhof:
 

Cola_Colin

Top Contributor
Ich muss mit denen rechnen ;)

Das Problem ist also, das es mich verwirrt und ärgert, das ich im Moment sowas habe:

Java:
                result.charWidths = new int[256];
                for (int i = 0; i < 256; i++) {
                    result.charWidths[i] = in.read(); // lese Breite der einzelnen Chars
                }

Wo es doch eigentlich nur bytes sind, die da in der Datei liegen.
 

Marco13

Top Contributor
Ach so... das könnte man ganz pragmatisch so machen
Java:
result.charWidths = new byte[256];
for (int i = 0; i < 256; i++) 
{
    int w = in.read();
    // ggf. "if (w != -1)" zum Prüfen auf dateiende oder so
    result.charWidths[i] = (byte)w;
}

Dann kann es sein, dass charWidths[x]=-96 oder so ist, obwohl es "eigentlich" was positives sein sollte, aber das kann man dann entsprechend beachten. Bei einem Array der (festen) Größe 256 kann man sich es aber auch einfach machen, und ihn als int deklarieren, das stört ja nicht. (Mittelding wäre noch ein short[]-array, aber es spricht da IMHO nichts gegen int[]...)
 

Ark

Top Contributor
Wenn du dann (nach Marco13s Vorschlag) mit den Bytes aus dem Array rechnen möchtest (ohne Vorzeichen), dann ändere die Art und Weise, wie die Bits interpretiert werden:
Java:
int normaleZahl = result.charWidths[0] & 0xFF; // erstes Element nehmen
Ark
 

Cola_Colin

Top Contributor
Es ist ein Array mit genau 256 Stellen, das schreibt der Dateityp so vor.
Hatte es dann eben so gelassen.
Java:
                result.charWidths = new int[256];

                for (int i = 0; i < 256; i++) {
                    result.charWidths[i] = in.read(); // lese Breite der einzelnen Chars
                }

Funktioniert gut so. Schade um die 256 * 3 byte die da eigentlich ungenutzt sind ;D
 

Marco13

Top Contributor
Wie gesagt: Wenn diese bytes kritisch WÄREN, könnte man einen byte[] nehmen. Aber ... bei 4GB RAM braucht' man ja kein neues Jahr-2000-Problem heraufzubeschwören :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V FileInputStream - read() Java Basics - Anfänger-Themen 2
R FileInputStream.read() != FileReader.read(). Pls Help Java Basics - Anfänger-Themen 5
B OutputStream in FileInputStream? Java Basics - Anfänger-Themen 9
W Konstruktor von FileInputStream nicht gefunden Java Basics - Anfänger-Themen 18
B FileInputStream entpacken und Zeile für Zeile entpacken Java Basics - Anfänger-Themen 1
D String in FileInputStream umwandeln Java Basics - Anfänger-Themen 2
N FileInputstream und BinaryStream Java Basics - Anfänger-Themen 3
V FileInputStream auf ein swt.Image Java Basics - Anfänger-Themen 6
R FileInputStream findet Datei nicht Java Basics - Anfänger-Themen 5
C Datentypen Rückgabewert von "new FileInputStream" Java Basics - Anfänger-Themen 4
K FileInputStream in Jar Java Basics - Anfänger-Themen 5
megachucky FileInputStream findet nur absoluten Pfad, keinen Relativen ?! Java Basics - Anfänger-Themen 7
B FileInputStream schliessen: unreported Exception...must be caught Java Basics - Anfänger-Themen 6
W new FileInputStream() blockiert bei fifo (named pipe) Java Basics - Anfänger-Themen 2
G FileInputStream--> Zahlen aus Datei lesen Java Basics - Anfänger-Themen 7
G FileInputStream manipulieren Java Basics - Anfänger-Themen 6
B FileinputStream und BufferedInputStream Java Basics - Anfänger-Themen 12
P Fileinputstream to image? Java Basics - Anfänger-Themen 3
I FileInputStream global deklarieren Java Basics - Anfänger-Themen 2
G relativer Pfad bei FileInputStream Java Basics - Anfänger-Themen 11
T Unterschiedliche Werte beim FileInputStream Lesen Java Basics - Anfänger-Themen 2
F FileInputStream(File file) funzt net Java Basics - Anfänger-Themen 2
C FileInputStream sehr langsam Java Basics - Anfänger-Themen 5
Z FileInputStream bricht ab Java Basics - Anfänger-Themen 6
frau-u Probleme mit richtiger Verwendung von FileInputStream Java Basics - Anfänger-Themen 2
G FileInputStream Java Basics - Anfänger-Themen 6
W aus ObjectInputStream muß FileInputStream werden Java Basics - Anfänger-Themen 12
C FileInputStream und FileOutputStream Java Basics - Anfänger-Themen 4
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
T IOStreams read(byte[]b) methode Java Basics - Anfänger-Themen 2
josfe1234 Hilfe access denied ("java.io.FilePermission" " " "read") Java Basics - Anfänger-Themen 12
C System.in.read() Boolsche Werte vergleichen Java Basics - Anfänger-Themen 8
J Variablen Komsiche System.in.read() return-value? Java Basics - Anfänger-Themen 3
N Threads Read-Modify-Write Problem bei Multithreading (philosopher dining problem) Java Basics - Anfänger-Themen 5
W Input/Output System.in.read erzeugt nicht, was ich will Java Basics - Anfänger-Themen 1
C Input/Output System.in.read() gibt nicht -1 zurück? Java Basics - Anfänger-Themen 3
F Input/Output Blocking file read erzeugen Java Basics - Anfänger-Themen 0
G Thread stoppen mit System.in.read() Java Basics - Anfänger-Themen 13
G comport read Java Basics - Anfänger-Themen 3
B Frage zur Effizienz von read und read(byte[]) Java Basics - Anfänger-Themen 23
S Java für Anfänger: Probleme mit read() Java Basics - Anfänger-Themen 20
G Input/Output System.in.read & Scanner Java Basics - Anfänger-Themen 2
S Eigener InputStream, Hilfe bei read-Methode Java Basics - Anfänger-Themen 6
L Fehler bei "read" ? Java Basics - Anfänger-Themen 4
R ImageIO.read Fehler Java Basics - Anfänger-Themen 4
K Input/Output read/write Java Basics - Anfänger-Themen 15
B Threads Interrupt während Socket.read()? Java Basics - Anfänger-Themen 3
G Problem mit Image.IO.read( File ) Java Basics - Anfänger-Themen 3
W Koordinaten mit System.in.read() setzen Java Basics - Anfänger-Themen 2
W file read write crash Java Basics - Anfänger-Themen 2
L Read.java Java Basics - Anfänger-Themen 4
F FileReader Methode Read() int? Java Basics - Anfänger-Themen 2
H int : never read - Fehler Java Basics - Anfänger-Themen 3
U Inputstream.read()/readLine() blockiert immer Java Basics - Anfänger-Themen 18
S access denied (java.io.FilePermission read) Java Basics - Anfänger-Themen 3
E Read a file in a package Java Basics - Anfänger-Themen 2
S System.in.read() Java Basics - Anfänger-Themen 2
G Verständnisfrage read() und readLine() Java Basics - Anfänger-Themen 6
C System.in.read() funktioniert nicht Java Basics - Anfänger-Themen 3
G unterschied zwischen in.read() und in.read(byte [] b, int. Java Basics - Anfänger-Themen 3
J System.in.read(): Unhandled exception type IOException Java Basics - Anfänger-Themen 12
P Read, Readline ? Java Basics - Anfänger-Themen 2
B System.in.read() wird übersprungen Java Basics - Anfänger-Themen 5
S System.in.read() mehrmals nacheinander aufrufen Java Basics - Anfänger-Themen 3
F Read access to enclosing field xy is emulated . Java Basics - Anfänger-Themen 2
R frage zur read()-Methode des BufferedReader Java Basics - Anfänger-Themen 2
M Streams, read and write Java Basics - Anfänger-Themen 2
J Wie geht out.read ? Java Basics - Anfänger-Themen 4
L read() (von bufferedReader) abbrechen Java Basics - Anfänger-Themen 5
L unterbrechen von bufferedReader.read() Java Basics - Anfänger-Themen 4
G System.in.read() wartet nicht auf eingabe Java Basics - Anfänger-Themen 1
M FileReader.read(char[]) - Größe des Arrays? Java Basics - Anfänger-Themen 4
D Text-Datei(en) mit der Methode read(bytes[] b) auslesen Java Basics - Anfänger-Themen 4
B Probleme mit Eingaben [System.in.read())] Java Basics - Anfänger-Themen 10
J Keyboard.read... Java Basics - Anfänger-Themen 4
T Anfänger: cannot read: error 1 Java Basics - Anfänger-Themen 8
Csircc Rekursive Methode Stack Overflow Java Basics - Anfänger-Themen 10
D Fibonacci overflow integer Java Basics - Anfänger-Themen 8
T Stack Overflow - Rekursive Fibonacci Java Basics - Anfänger-Themen 10
G Was passiert bei einem Overflow von zwei Integer Java Basics - Anfänger-Themen 6
F Rekursion Tiefensuch-Problem - Stack Overflow Java Basics - Anfänger-Themen 9
M 2 Fragen: overflow und toInteger Java Basics - Anfänger-Themen 5
B overflow / truncation Java Basics - Anfänger-Themen 6
N Overflow verhindern? Java Basics - Anfänger-Themen 16
K Stack Overflow Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben