Frage

Gibt es eine einfache Möglichkeit, die readline () Methode in Java zu überspringen, wenn es länger dauert, als, sagen wir, 2 Sekunden?

Hier ist der Kontext, in dem ich diese Frage bin gefragt:

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 ist eine Klasse, ich schrieb, und das Empfangsverfahren, das ein BufferedReader enthält genannt „in“, dann ist dies:

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

Ich habe bemerkt, dass das Programm beendet und wartet auf den Eingangsstrom, etwas zu haben, bevor Sie fortfahren zu lesen. Welches ist schlecht, weil ich das Programm benötigt Looping zu halten (wie Schleifen, es alle zu den anderen Kunden geht und fragt nach Eingang). Gibt es eine Möglichkeit, die readline () Prozess zu überspringen, wenn es nichts zu lesen?

Ich bin auch ziemlich sicher, dass ich erklären dies nicht gut, so fragen Sie mich bitte Fragen, wenn ich verwirrend zu sein.

War es hilfreich?

Lösung

Der Timeout allein ist keine gute Idee. Verwenden Sie einen Thread pro Client (oder verwenden Sie asynchrones I / O, aber wenn Sie einige Hochleistungsanwendung Gebäude sind, das ist unnötig kompliziert).

Wie für den Timeout selbst, muss sich auf dem Strom durchgeführt werden, die eingekapselt ist. Siehe zum Beispiel Wie kann ich ein Timeout gegen einen BufferedReader gesetzt, basierend auf einem URLConnection in Java?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top