PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Stream von process lesen geht nicht so richtg (Windows)



eule
15-03-2008, 17:59
Guten Tag
Ich habe mal wieder ein altes/neues Problem. Wenn ich ein Process starte und mir mit
B = new BufferedReader(new InputStreamReader(xProcess.getErrorStream())); den gepufferten input stream hole, funktioniert das lesen mit
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?

fs111
17-03-2008, 12:43
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

eule
17-03-2008, 13:58
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?

jan61
17-03-2008, 19:36
Moin,

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

Jan

eule
17-03-2008, 19:40
Dass er, wie unter Linux, solange puffert, bis eine neue Zeile kommt. Bis vor ca. einen Jahr ging das auch unter Windows noch so.

eule
17-03-2008, 20:00
So. Die Daten sind auch einfach nicht da. Ich habe es mal mit folgenen Code getestet.
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.

jan61
17-03-2008, 20:11
Moin,


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

eule
17-03-2008, 20:18
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.