Anzeige:
Ergebnis 1 bis 8 von 8

Thema: Stream von process lesen geht nicht so richtg (Windows)

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.01.2007
    Beiträge
    27

    Stream von process lesen geht nicht so richtg (Windows)

    Guten Tag
    Ich habe mal wieder ein altes/neues Problem. Wenn ich ein Process starte und mir mit
    Code:
    B = new BufferedReader(new InputStreamReader(xProcess.getErrorStream()));
    den gepufferten input stream hole, funktioniert das lesen mit
    Code:
    b.readline()
    nicht. Das Programm, was ich ausführe liefert alle 0,5 Sekunden eine neue Zeile. Der Puffer vom InputStreamReader bleibt aber für ca 107 Sekunden leer und liefert dann alle Ausgaben auf einmal, bis der Puffer leer ist. Dann muss ich wieder 107 Sekunden warten bis ich wieder alle Ausgaben der letzten 107 Sekunden auf einmal bekomme.
    Das Problem besteht nur unter Windows. Unter Linux funktioniert es einwandfrei.
    Hat Jemand eine Idee, wie ich rausbekomme, was Java in der Zeit unter Windows tut?

  2. #2
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    Hört sich so an, als würde Windows den output des anderen Programmes buffern. Kannst Du das andere Programm evtl. ändern und den OutputStream nach jeder Zeile explizit flushen?

    fs111
    ....::::Mein Blag::::....

  3. #3
    Registrierter Benutzer
    Registriert seit
    28.01.2007
    Beiträge
    27
    hi fs111

    Leider ist das Programm komplett extern. Ich muss lediglich auf die Ausgaben reagieren.
    Du weißt nicht zufällig, wie ich so einen Puffer abstellen, bzw minimal gestallten kann?

  4. #4
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    naja, was willst Du von einem BufferedReader auch anderes erwarten als eine gepufferte Ausgabe?

    Jan

  5. #5
    Registrierter Benutzer
    Registriert seit
    28.01.2007
    Beiträge
    27
    Dass er, wie unter Linux, solange puffert, bis eine neue Zeile kommt. Bis vor ca. einen Jahr ging das auch unter Windows noch so.

  6. #6
    Registrierter Benutzer
    Registriert seit
    28.01.2007
    Beiträge
    27
    So. Die Daten sind auch einfach nicht da. Ich habe es mal mit folgenen Code getestet.
    Code:
    while (!isDead)
    {
    	if(streamProcess.getErrorStream().available() == 0)
    	{
    		Thread.sleep(1000);
    		System.out.println("0");
    	}
    	else
    	{
    		System.out.println(b.readLine());
    	}
    }
    edit: und die Ausgabe war wie erwartet: ca 100 mal die 0 und und dann ganz schnell nach einander die Zeilen. Dann wieder die Nullen usw.
    Geändert von eule (17-03-2008 um 20:05 Uhr)

  7. #7
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    Zitat Zitat von eule Beitrag anzeigen
    Dass er, wie unter Linux, solange puffert, bis eine neue Zeile kommt. Bis vor ca. einen Jahr ging das auch unter Windows noch so.
    sorry, ich habe Dein Posting wohl nur halb gelesen. Welche Windows-/Java-Versionen hattest Du denn damals und hast Du heute im Einsatz? Findest Du zu dem Thema was bei java.sun.com oder M$? Auch unter Linux kannst Du Dich ja nicht 100% darauf verlassen, dass ein flush des Streams zum Zeilenende erfolgt (z. B. beim Lesen aus Named Pipes). Gibts vielleicht Hinweise auf ein geändertes Handling unter Windows?

    Jan

  8. #8
    Registrierter Benutzer
    Registriert seit
    28.01.2007
    Beiträge
    27
    Welcher Version das damals war, weiß ich leider nicht mehr genau, da ich Windows sehr selten benutze. Das sollte aber zu ziemlich die erste Version von Java6 gewesen sein, die ich vor einem Jahr benutzt hatte. Jetzt hab ich die aktuellste drauf.

    Ich habe noch nirgends irgendwas zu dem Thema gefunden. Ich suche auch schon etwas länger danach, weil es wohl so schon seit Juli 2007 so zu sein scheint. Ich weiß auch nicht so genau nach welchen Stichpunkten ich da suchen soll.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •