Пропуск метода BufferedReader readLine() в java

Есть ли простой способ пропустить метод readLine() в java, если он занимает больше времени, скажем, 2 секунды?

Вот контекст, в котором я задаю этот вопрос:

public void run()
{
    boolean looping = true;
    while(looping) {
        for(int x = 0; x<clientList.size(); x++) {
            try {
                Comm s = clientList.get(x);
                String str = s.recieve();
                // code that does something based on the string in the line above
            }
            // other stuff like catch methods
        }
    }
}

Comm — это класс, который я написал, и метод получения, который содержит BufferedReader с именем «in», таков:

public String recieve()
{
    try { if(active) return in.readLine(); }
    catch(Exception e) { System.out.println("Comm Error 2: "+e); }
    return "";
}

Я заметил, что программа останавливается и ждет, пока входной поток будет что-то читать, прежде чем продолжить. Что плохо, потому что мне нужно, чтобы программа продолжала зацикливаться (когда она зацикливается, она обращается ко всем другим клиентам и запрашивает ввод). Есть ли способ пропустить процесс readLine(), если читать нечего?

Я также почти уверен, что плохо объясняю, поэтому, пожалуйста, задавайте мне вопросы, если я путаю.


person exodrifter    schedule 18.05.2010    source источник


Ответы (1)


Сам по себе тайм-аут не является хорошей идеей. Используйте один поток для каждого клиента (или используйте асинхронный ввод-вывод, но если вы не создаете какое-либо высокопроизводительное приложение, это излишне сложно).

Что касается самого тайм-аута, это должно быть сделано в инкапсулированном потоке. См., например, Как установить тайм-аут для BufferedReader на основе URLConnection в Java?

person Artefacto    schedule 18.05.2010
comment
Использование BufferedReader или BufferedInputStream для базового Reader/Stream с тайм-аутом также опасно. Эти буферизованные классы не пытаются восстановиться после тайм-аута, поэтому вы можете потерять частично переданные пакеты. - person Kevin Brock; 19.05.2010