2010-05-18 5 views
3

Existe-t-il un moyen facile d'ignorer la méthode readLine() dans java si cela prend plus de deux secondes, par exemple?Ignorer la méthode readLine() de BufferedReader dans java

est ici le contexte dans lequel je pose cette question:

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 est une classe que j'ai écrit, et la méthode receive, qui contient un BufferedReader appelé "in", est la suivante:

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

J'ai remarqué que le programme s'arrête et attend que le flux d'entrée ait quelque chose à lire avant de continuer. Ce qui est mauvais, parce que j'ai besoin du programme pour continuer à boucler (comme il boucle, il va à tous les autres clients et demande l'entrée). Est-il possible d'ignorer le processus readLine() s'il n'y a rien à lire?

Je suis également assez sûr que je n'explique pas bien ceci, alors s'il vous plaît posez-moi des questions si je suis confus.

Répondre

4

Le délai d'attente seul n'est pas une bonne idée. Utilisez un thread par client (ou utilisez des E/S asynchrones, mais à moins que vous ne construisiez une application haute performance, c'est inutilement compliqué). En ce qui concerne le timeout lui-même, il doit être fait sur le flux qui est encapsulé.

Voir par exemple How can I set a timeout against a BufferedReader based upon a URLConnection in Java?

+0

L'utilisation de BufferedReader ou BufferedInputStream sur un lecteur/flux sous-jacent ayant un délai d'expiration est également dangereuse. Ces classes mises en mémoire tampon ne tentent pas de récupérer à partir d'un délai d'attente afin que vous puissiez perdre des paquets partiellement transmis. –

Questions connexes