2013-04-13 15 views
1

在下面的while循環中,我只想從Process p的輸出中只讀取最新的一行,忽略循環處於休眠狀態時進入緩衝區的任何其他內容。我怎麼做?java Process,getInputStream,只讀最新行

String s; 
Runtime r = Runtime.getRuntime(); 
Process p = r.exec("SomeContinuousProgram"); 
myInput = new BufferedReader(new InputStreamReader(p.getInputStream())); 

while (true){ 
    if ((s = myInput.readLine()) != null) { 
    System.out.println(s); 
    } 
Thread.sleep(sleep); 
} 

回答

2

您不能「跳過」從過程寫入的最新行。你必須閱讀它之前的所有行。

將程序拆分爲2個線程。主線程將從BufferedReader讀取,並將跟蹤最新的線路是什麼。另一個線程將休眠,然後顯示最新的行。

+0

謝謝。我意識到在我重新找到它之前,緩衝區中只有大約10行,所以ijust做到了這一點:int c = 0; \t \t \t \t \t \t while((str = marsyasInput.readLine())!= null && c <20)C++; – user1971455

0
while (true){ 
    if ((s = myInput.readLine()) != null) { 
    System.out.println(s); 
    } 

此代碼沒有任何意義。如果readLine()返回null,則它是流的結尾,唯一合理的過程是關閉流並退出讀取循環。

+0

流的結束將永遠不會到來,因爲該過程是連續的。這就是爲什麼我只想抓住最新的條目,就像LIFO容器一樣。 – user1971455