передача значений процесса ввода-вывода в другой класс в режиме реального времени в Java - PullRequest
3 голосов
/ 13 января 2012

У меня есть базовый вопрос, для которого мне нужно кое-что прояснить в его использовании.
Так что, если у меня есть один класс в Java, скажем IOReadWrite.java, где я делаю некоторые операции ввода-вывода для чтения / записи. Так что он может иметь всегда подключенный цикл, например:

while ((line = stream.readLine()) != null){
     //incoming data
}  

Теперь у меня есть другой класс, назовите его FrontEnd.java, где я должен отображать результаты, поступающие в режиме реального времени из IOReadWrite.java Класса. Обычно происходит то, что, если я вызываю метод класса IO, я не могу получить результат, если не завершена вся операция ввода-вывода и мне придется ждать.

Однако я хочу получить эти результаты в режиме реального времени, чтобы, как только на входном потоке было что-то, я мог получить его в своем классе FrontEnd, чтобы делать с ним все, что я хочу.

Одна идея, которую я выдвинул, заключается в использовании статической переменной String в IOReadWrite.java и написании метода, который просто возвращает значение этой переменной, и я могу опрашивать эту функцию из основного класса. Но я уверен, что это очень плохой подход.

Можете ли вы предложить, как правильно получать такую ​​информацию в режиме реального времени?

1 Ответ

2 голосов
/ 13 января 2012

Вы можете сделать это

FrontEnd frontEnd = 
while ((line = stream.readLine()) != null){
     //incoming data

     // notify immediately.
     frontEnd.displayLine(line);
}

То, что делает displayLine, зависит от вашей реализации этого класса.Можете ли вы дать более подробную информацию о том, что класс делает с информацией?

Что-то, что он мог сделать, это

private final BlockingQueue<String> linesQueue = ...

public void displayLine(String line) {
     linesQueue.add(line);
}

// somewhere else, in another thread.
String line = linesQueue.take(); // wait for a line.

String line = linesQueue.poll(); // get the next or null
...