1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Stream Input

  • michi204
  • 19. Dezember 2002 um 12:44
  • Unerledigt
  • michi204
    26
    michi204
    Mitglied
    Reaktionen
    63
    Punkte
    7.268
    Beiträge
    1.318
    • 19. Dezember 2002 um 12:44
    • #1

    Für ein konsolenbasiertes Terminal&Chat-Programm muss ich die Eingabe des benutzers zeichenweise einlesen. Ich habe es schon mit den verschiedensten Subclasses von InputStream probiert und habe immer das gleiche Problem: Die eingegebenen Zeichen erscheinen immer erst dann am Bildschirm, wenn die ENTER-Taste gedrückt wurde...

    Hier der Code:
    (DataInputStream con ist stdin also Tastatureingabe, char ch ist das eingelesene Zeichen, PrintWriter out ist die Klasse welche das Zeichen übers Netzwerk sendet)

    Code
    while(con.available()>0)
    			  {
    			      ch=(char)con.read();
    			      System.out.flush();
    			      if(ch==9) //TAB-gedrückt -Abbruch
    				  break;
    			      out.print(ch);
    			      out.flush();
    			  }

    Daraus, dass das TAB-Zeichen auch erst registriert wird, wenn ENTER gedrückt wurde, kann man sehen, dass die Zeichen mit read() erst dann eingelesen werden, wenn ENTER gedrückt wurde. Hat irgendjemand eine Idee wie ich gleich an meine Zeichen komme??

  • martin
    14
    martin
    Mitglied
    Reaktionen
    69
    Punkte
    1.904
    Beiträge
    359
    • 19. Dezember 2002 um 13:48
    • #2

    Zeichenweises einlesen geht in Java afaik nicht. Dein Programm "sieht" den Input von STDIN erst nachdem <Enter> (kann aber plattformabhängig was aderes sein, obwohl ichs nicht glaub) gedrückt wurde.

    Die einzig wirklich brauchbare Lösung ist eine, die erst ab JDK 1.4 funktioniert: Buffer (in dem Fall wohl konkret CharBuffer oder ByteBuffer). Du müsstest eine plattformspezifische - ANSI C bietet sich da an... - Methode schreiben und sie mittels JNI einbinden. Buffer sind so designed, dass sie problemlos mit native Methoden zusammen verwendet werden können. Du findest sie in der Package java.nio

  • michi204
    26
    michi204
    Mitglied
    Reaktionen
    63
    Punkte
    7.268
    Beiträge
    1.318
    • 19. Dezember 2002 um 14:34
    • #3

    hab jetzt eine lösung mit 2 Threads gefunden... der eine liest die ganze zeit vom netzwerk und der andere liest mir System.in.read() jeweils ein Zeichen ein und sendet es.. funktioniert super, war halt viel umständlicher...

    trotzdem danke!:thumb:

  • dose
    13
    dose
    Mitglied
    Reaktionen
    4
    Punkte
    1.679
    Beiträge
    335
    • 19. Dezember 2002 um 15:12
    • #4

    Unter Linux gibts die Möglichkeit, wirklich jedes Zeichen einzeln einzulesen, dazu muß man allerdings vorher im Terminal irgendein Kommando eingeben...weiß allerdings nicht mehr, was das war, wurde aber im Forum schon mal gepostet...

    yast, SuSEconfig, apt-get and rpm - the 4 horsemen of the apocalypse

    Platform of insanity :: http://www.dose-xp.org

  • Maximilian Rupp 27. Dezember 2024 um 12:08

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung