DataInputStreamUndReadInt

  • Themenstarter DataInputStreamUndReadInt
  • Beginndatum
Status
Nicht offen für weitere Antworten.
D

DataInputStreamUndReadInt

Gast
Code:
import java.io.*;


public class Namen {

	
	public static void main(String[] args)throws IOException {
		
		

		DataInputStream in = new DataInputStream(System.in);
		
		System.out.print("Bitte geben sie die Kosten an :\n");
		

		System.out.println("Sie haben folgende Kosten angegeben:\t"+in.readInt());
	}

}


Hallo

Hab mir jetzt schon länger Gedanken gemacht warum das oben nicht klappt. :autsch:

Was macht das Objekt System.in von der Klasse InputStream genau aus meiner Eingabe?
Wenn es die Eingabe ( z.B. ein int Zahl) als bytestrom einliest müsste doch readInt() funktionieren.
Irgendetwas habe ich nicht begriffen. :roll:
readInt() ist doch dazu da um aus 4 bytes ein int herauzulesen, warum kriegt man dann
immer falsche Zahlen heraus?

Ich weiss dass es mit BufferedReader besser geht, würde
aber trotzdem gerne wissen woran es liegt.


Danke
 

HAOSK

Mitglied
hi, es könnte daran liegen, dass du mit readInt() die IntegerWerte der einzelnen Buchstaben bzw. Zahlen ausliest. Z.B. "A" => 65
Siecher bin ich mir aber nicht...

sollte es zutreffen, versuch doch mal den String zu parsen...

Gruß
HAOSK
 
B

Beni

Gast
Der DataInputStream geht bei einem "readInt" von 4 Bytes als Eingabe aus.
Wenn du den BufferedReader, und dann "Integer.parseInt" benutzt, gehst du von einem String aus (der mehr oder weniger als 4 Bytes an Zeichen haben kann).

Einmal Daten in binärer Form, einmal Daten als Text -> passt nicht zusammen.
 
D

DataInputStreamReadInt

Gast
Mit diesem Codeschnipsel, den ich irgendwo im Forum gefunden habe, geht es einwandfrei.
Code:
public static int readInt()
    {
        int i=0;
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        try
        {
            i= Integer.parseInt(reader.readLine());
        } catch (NumberFormatException e)
        {
           System.out.println("Falsche Eingabe! Bitte Wiederholen");
           return readInt();
        } catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return i;
       
    }

Um wieder zu dem DataInputStream test= new DataInputStream(System.in); Problem zu kommen,
ich glaube bei Eingabe einer ganzen Zahl, z.B. 7, wird dies als byte von System.in in Unicode gespeichert,
und die test.readInt() Methode von DataInputStream benutzt UTF-8 ??? Muss aber eigentlich dasselbe für
Zeichen zwichen 32 und 127 sein. :autsch:

Würde immer noch gerne wissen warum das nicht geht. :bae:
Vielleicht weiss das jemand im "Allgemeines"


Danke und Gruss

DataInputStream
 
G

Guest

Gast
Vielleicht schaust du dir einfach mal die API Doku an.


Ja die Idee hat ich auch schon, habe es sogar mir schon zweimal angeschaut , aber verstehe nicht ganz was
das bedeutet: :autsch:

Reads four input bytes and returns an int value. Let a be the first byte read, b be the second byte, c be the third byte, and d be the fourth byte. The value returned is:

(((a & 0xff) << 24) | ((b & 0xff) << 16) |
((c & 0xff) << 8) | (d & 0xff))

Müsste ja mit System.in vom Typ InputStream klappen. :autsch:
 

Lim_Dul

Top Contributor
Du gibts per Tastatur den das Ascii-Zeichen 1 (Ascii-Code 49 oder so) ein. Der DataInputStream erwartet, aber keine Ascii Daten sondern die richtige Kodierung für Zahlen. Also die korrekte Binärdarstellung.

Um die Zahl 1 einzugeben, muss du die Zeichen mit den Ascii-Codes 0,0,0 und 1 eingeben.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben