Input/Output System.in.read() gibt nicht -1 zurück?

Chupup

Neues Mitglied
Hallo!

Bin in einer Endlosschleife gefangen und verstehe nicht wieso.
Ich dachte eigentlich, dass die read()-Methode -1 zurückgibt,
wenn das Ende des Datenstroms erreicht wurde. :bahnhof:

Java:
import java.io.IOException;

public class KeyboardInput {

	public static void main(String[] args) throws IOException {
		
		int input;
		
		System.out.print(">> ");
		
		do {
			
			input = System.in.read();
			
			if(input != -1)
				System.out.println(input);
			
		} while(input != -1);
		
		System.out.println("End.");

	}

}


Gruß, Chupup
 

Kevin94

Top Contributor
Und wann ist das Ende des Datenstroms erreicht?
Code:
read()
gibt nur dann -1 zurück, wenn keine Daten mehr kommen können. Bei einer Datei kann man das sagen (hat ne feste Größe) aber bei "richtigen" Streams wie der, der Konsole und den von Sockets, kann ja immer noch was nachkommen. Da müssten die Daten einem gewissen Protkoll entsprechen und enthalten, wieviele Bytes noch kommen, damit der Empfänger weiß wieviel er einlesen soll.
Zumindest unter Linux gibt es die Möglichkeit über eine Tastenkombination (Strg+D afair) ein ASCII-Steuerzeichen in die Konsole einzugeben, dass EOF bedeutet. Es ist allerdings reine Spekulation, wenn ich sagen würde, dass diese Eingabe System.in schliest, weil ich glaube mich erinnern zu können, dass man den überhaupt nicht schliesen kann.

Lange Rede, kurzer Sinn: Im Normalfall ist besser/einfacher zu fragen: Sind gerade Daten da (
Code:
available()
), als zu fragen: Gib mir das nächste Byte oder warte bis der Stream geschlossen wird. Das hat u.U. den Nachteil, dass man einen (zusätzlichen) Puffer bilden muss, ist aber der einzige Weg das Problem von Streams, dass Daten zerstückelt und mit Pausen dazwischen, ankommen, zu lösen.

Um dein Problem zu lösen: Du könntest einen Endezeichen definieren (z.B. Zeilenumbruch) und dann die Schleife Endloschleife (du könntest auch
Code:
while(true)
schreiben) mit einem break verlassen. Oder du könntest einen Timeout programmieren, das wäre für dich aber vermutlich ziemlicher Overkill, weil es dazu einen zweiten Thread bräuchte.
 

Chupup

Neues Mitglied
Ok, jetzt verstehe ich es. Ich dachte der Eingabe-Stream würde als beendet angesehen, wenn der User z.b. Enter drückt und damit die Eingabe abschließt.

Danke
 

Kevin94

Top Contributor
Das mit dem Enter ist noch mal was anderes: Die Konsole/das Betriebssystem puffert die Nutzereingaben selber, sodass der Nutzer eingegebenen Zeichen noch ändern kann, solange bis er Enter drückt und erst dann werden die Daten an System.in übergeben. In C kann man dieses Verhalten auch deaktivieren, aber nicht in Java.

Und Enter wäre ein sehr ungünstige Taste, weil dann könnte man immer nur eine Zeile eingeben. Es gibt allerdings so eine Tastenkombi, Strg+C, das beendet den in der Konsole laufenden Prozess. (Schließt also nicht direkt den Stream, hätte aber den gewünschten Effekt)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
W Input/Output System.in.read erzeugt nicht, was ich will Java Basics - Anfänger-Themen 1
G Thread stoppen mit System.in.read() Java Basics - Anfänger-Themen 13
G Input/Output System.in.read & Scanner Java Basics - Anfänger-Themen 2
W Koordinaten mit System.in.read() setzen Java Basics - Anfänger-Themen 2
S System.in.read() Java Basics - Anfänger-Themen 2
C System.in.read() funktioniert nicht Java Basics - Anfänger-Themen 3
J System.in.read(): Unhandled exception type IOException Java Basics - Anfänger-Themen 12
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
G System.in.read() wartet nicht auf eingabe Java Basics - Anfänger-Themen 1
B Probleme mit Eingaben [System.in.read())] Java Basics - Anfänger-Themen 10
D System.out.println Java Basics - Anfänger-Themen 1
O System.out.println wird nicht ausgegeben? Java Basics - Anfänger-Themen 11
paulen1 Methoden Unerwünschte Ausgabe bei System.out.print in For-Schleife Java Basics - Anfänger-Themen 8
M Keine Ausführung von System.out.println() Java Basics - Anfänger-Themen 3
O System.out array Java Basics - Anfänger-Themen 4
J Programm beenden ohne System.exit() oder Runtime.exit() Java Basics - Anfänger-Themen 5
C System.out.println - Parameterübergabe funktioniert nicht Java Basics - Anfänger-Themen 2
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
H Befehl wird nicht ausgeführt - System.out.println Java Basics - Anfänger-Themen 3
C system cannot be resolved Fehler in Eclipse Java Basics - Anfänger-Themen 18
S Anweisungen verstehen System.out.print/println Java Basics - Anfänger-Themen 2
B Warum werden meine System.out.println's übersprungen? Java Basics - Anfänger-Themen 9
I System.currentTimeMillis() nutzen Java Basics - Anfänger-Themen 2
R Erste Schritte Eclipse - Java - System.out.println(); funktioniert nicht Java Basics - Anfänger-Themen 2
B Input/Output System.out.print mit und ohne "" Java Basics - Anfänger-Themen 5
T System.out.println() Java Basics - Anfänger-Themen 5
M System.property persistieren Java Basics - Anfänger-Themen 6
N (Java) Regristrierung und Login System mit einer Datenbank Java Basics - Anfänger-Themen 5
A Input/Output System.out Ausgabe aktualisieren, ohne Konsole vollzuspamen Java Basics - Anfänger-Themen 2
R Input/Output Frage zu System.out.println Java Basics - Anfänger-Themen 5
S System.out.printIn("Hello, World!"); Java Basics - Anfänger-Themen 3
A Passwort System Java Basics - Anfänger-Themen 4
N Input/Output System.in funktioniert nicht Java Basics - Anfänger-Themen 4
S Input/Output System.out.println - Manipulieren bzw. Alternative..? Java Basics - Anfänger-Themen 2
E Was ist die JRE System Library? Java Basics - Anfänger-Themen 3
V System.out.println zu JTextArea Java Basics - Anfänger-Themen 6
V OOP System.out.println(Objekt) Java Basics - Anfänger-Themen 3
D int x in System.out.println(), aber wie? Java Basics - Anfänger-Themen 1
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
N System Proxy verwenden Java Basics - Anfänger-Themen 0
C system.out.printf mit streams benutzen Java Basics - Anfänger-Themen 7
L system.print.out geht nicht Java Basics - Anfänger-Themen 11
D Ausgabe einer Matrix mit System.out.println Java Basics - Anfänger-Themen 6
F System kann die Datei nicht finden Java Basics - Anfänger-Themen 7
R ArrayList - System.out.println nur einmal, statt 10 mal Java Basics - Anfänger-Themen 5
M Verwendung von System.exit(0) problematisch? Java Basics - Anfänger-Themen 1
D system.out.println >> JTextArea Java Basics - Anfänger-Themen 1
O Frage zu System.out.println() Java Basics - Anfänger-Themen 1
G System.out.printf geht nicht Java Basics - Anfänger-Themen 6
A System.out.println() - Aufbau Java Basics - Anfänger-Themen 1
D JDK installieren No JVM could be found on your system. Java Basics - Anfänger-Themen 9
Z System(einstellungen) per Java ändern/Steuern | Betriebssystembezogen Java Basics - Anfänger-Themen 7
M Variablen Ausgabe bei System.out.format? Java Basics - Anfänger-Themen 3
FrankR2 Grundsätzliches Verständnisproblem: Java 32/64-bit; Windows 7/8, 32/64-bit-System Java Basics - Anfänger-Themen 5
D kleines problem bei system.out.println schreibweise Java Basics - Anfänger-Themen 6
J Umgang mit System.out.println() und .print() Java Basics - Anfänger-Themen 6
C Kleines Problem mit System.out.print Java Basics - Anfänger-Themen 1
G classname.System.out.println(); ? Java Basics - Anfänger-Themen 2
H Einfluss von System.out auf Programm Java Basics - Anfänger-Themen 2
K System.currentTimeMillis() und die Sommerzeit Java Basics - Anfänger-Themen 5
M Wann PATH und wann JAVA_HOME in Windows System 7 setzen? Java Basics - Anfänger-Themen 2
M CSV-File aus datei system einlesen Java Basics - Anfänger-Themen 3
R Char wird in System.out.print(); nicht ausgegeben Java Basics - Anfänger-Themen 6
T System.out.print : Frage zu Aufbau Java Basics - Anfänger-Themen 4
P Update System Java Basics - Anfänger-Themen 16
T If ; else error on system token delete Java Basics - Anfänger-Themen 5
M System.getProperty("java.vm.version") liefert build-Version Java Basics - Anfänger-Themen 4
O If in System.out.println Java Basics - Anfänger-Themen 11
J HILFE Benutzen einer Klasse aus JRE System Library Java Basics - Anfänger-Themen 4
T Erste Schritte import java.lang.System.out Java Basics - Anfänger-Themen 4
N Erste Schritte Ausgabe in System.out Java Basics - Anfänger-Themen 13
D Scanner(System.in) Schleife Java Basics - Anfänger-Themen 7
H System.out umleiten Java Basics - Anfänger-Themen 5
J Erste Schritte System.out.print (Fehlermeldung) Java Basics - Anfänger-Themen 14
C System.out in String schreiben Java Basics - Anfänger-Themen 2
P System - Tage erkennen ( System Time ?) Java Basics - Anfänger-Themen 3
lulas[]args Alternative zu System.err.println(); Java Basics - Anfänger-Themen 5
X Eclipse System.out.print fehler Java Basics - Anfänger-Themen 5
K char-int-Addition in System.out.print Java Basics - Anfänger-Themen 3
O Tabelle Formatieren mit system.out.format Java Basics - Anfänger-Themen 11
F System.getProperty("line.separator") funkt. nicht Java Basics - Anfänger-Themen 4
N Erste Schritte System.err und System.out Java Basics - Anfänger-Themen 5
Z System.out.format, Hilfe. Java Basics - Anfänger-Themen 14
C System.out.println Java Basics - Anfänger-Themen 4
R System.exit mit String als Rückgabedatentyp Java Basics - Anfänger-Themen 3
G Input/Output System.err zusätzlich in Datei schreiben Java Basics - Anfänger-Themen 27
A Problem beim Ausführen einer .jar datei auf externen System Java Basics - Anfänger-Themen 5
S Input/Output Neuen InputStream System.in setzen Java Basics - Anfänger-Themen 11
I Input/Output System.out.println formatierung? möglich? Java Basics - Anfänger-Themen 2
J Schleife und system.exit(); Java Basics - Anfänger-Themen 2
ruutaiokwu System.err.print(ln) macht ein durcheinander??! Java Basics - Anfänger-Themen 8
D Frage zu System.out.println() Funktion Java Basics - Anfänger-Themen 6
J System.out - Zwischenablage Java Basics - Anfänger-Themen 5
T System.out.printf Zeilenumbruch nach x Stellen Java Basics - Anfänger-Themen 4
Guybrush Threepwood System.exit(int status) Java Basics - Anfänger-Themen 3
L Kein System.out Java Basics - Anfänger-Themen 14
M System.nanoTime Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben