[JAVA/FTP] Question de codage

Question de codage [JAVA/FTP] - Java - Programmation

Marsh Posté le 20-07-2003 à 17:24:20    

Bonjour, je code un petit client ftp.
 
dans une classe FTP, pour obtenir une reponse du serveur, je fais ca :
 

Code :
  1. public String reponse()
  2.       {
  3.          try {
  4.             if (inp.ready()==true){
  5.                String reponse=inp.readLine();
  6.                return reponse;
  7.             }
  8.             else
  9.                return null;
  10.          }
  11.              catch (IOException e) {
  12.                e.printStackTrace();
  13.                return null;
  14.             }
  15.       }


 
c'est une fonction non bloquante qui me renvoie une reponse si on peut lire le flux (inp) ou qui renvoie null si on ne peut pas.
 
 
c'est pourquoi dans une autre classe (celle qui a besoin de la reponse) je fais ca :
 

Code :
  1. public String lecture()
  2.       {
  3.          String reponse=null;
  4.          String code="";
  5.      
  6.          while (code.equals(" " )!=true){
  7.        
  8.             reponse =reponse();
  9.             while (reponse==null)
  10.                reponse=reponse();
  11.        
  12.             log.afficher(reponse);
  13.        
  14.             if (reponse.equals("" )!=true){
  15.                code=reponse.substring(3,4);
  16.             }
  17.          }
  18.      
  19.          return reponse;
  20.       }


 
et la c'est carrement bloquant, je bouffe meme 100% des ressources de la machine et on boucle indefiniment si la reponse ne vient jamais, je me demandais si il n'y avait pas un autre moyen de faire,  par exemple avec un timer qui appelerait 5 fois reponse() ? ou une autre solution que je ne connais pas.
 
PS : quand je fais reponse.substring(3,4); c'est au cas ou aurait un 230- et non un 230* ou * est un espace.

Reply

Marsh Posté le 20-07-2003 à 17:24:20   

Reply

Marsh Posté le 20-07-2003 à 20:44:18    

c'est normal que ca boucle et que ca fasse un 100% quand in est pas ready d'après ton code.
 
Tu peux déjà mettre un Thread.yield() pour éviter que ton proc monopolise le CPU.
Tu peux aussi faire des Thread.sleep(), c'est à dire des pauses pour attendre que le flux soit ready
 
Enfin, dan le JDK 1.4, y a des mécanismes dans java.nio qui permettent de faire de la lecture de flux non-bloquante ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-07-2003 à 13:38:44    

oué le sleep ca marche d'enfer maintenant je suis a 3% d'utilisation cpu c mieux!!!
 
merci bcp
 
sinon juste pour info tu pourrais m'aiguiller pr la lecture de flux non bloquante? parceke je ne connais pas du tout.
 
A+

Reply

Marsh Posté le 21-07-2003 à 14:04:34    

j'ai pas de lien à te filer, mais je suis certain qu'en tapant "java nio tutorial" tu trouveras plein de trucs ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed