2013-04-13 3 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 строк, прежде чем я получу его снова, поэтому я сделал это: int c = 0; \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

Смежные вопросы