Java.io.IOException: Pipe not connected

karine -  
 vorax -
Bonjour,

voici mon code, je veux envoyer ce que je lis avec relaybinary dans le pipe pour le transmettre à interpreteur :

private PipedOutputStream relayBinary() throws IOException 
    {
	byte[] buf=new byte[1024];
        PipedOutputStream pipe = new PipedOutputStream();
	int n;

	while (true) {
	    n=fromWebBin.read(buf);
	    pipe.write(buf, 1, n-1);
	   
	}
	return pipe;
    } // !relayBinary

void envoi_reponseWeb_au_client() {
PipedOutputStream pipe = new PipedOutputStream();
pipe = relayBinary();
		
		 
PipedInputStream pipe2 = new PipedInputStream(pipe);
				
			

InputStreamReader input = new InputStreamReader(pipe2);
			
Interpreteur interprete = new Interpreteur(input, url); 
		
}
    


Voici mon erreur : java.io.IOException: Pipe not connected

Est-ce que vous voyez d'où ça provient ?

merci

10 réponses

  1. jebok Messages postés 371 Date d'inscription   Statut Membre 51
     
    Sur quelle ligne se déclenche l'erreur ?
    0
  2. karine
     
    Ca se déclenche à la ligne

    pipe.write(buf, 1, n-1);


    dans la methode relayBinary.

    Comment je peux corriger ça ?

    merci !
    0
  3. karine
     
    heu, c'est quoi le connect ?

    j'ai jamais fait de pipe avant, donc je suis un peu paumée ;-)
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Aaaahaha tu n'as jamais fait de pipe (prononcer païpe) avant :o)))) C'est ton droit ^^ Oups pardon :o)

    Bon en gros un pipe c'est une espèce de tube. Tu écris d'un coté et tu lis de l'autre. Il faut donc que tu le connectes pour définir qui lit et qui écrit. Donc regarde comment ça marche sur le lien ci-dessus.

    Un exemple ici :
    http://gbm.esil.univ-mrs.fr/~tourai/Java/node16.html#SECTION0214140000000000000000
    0
  6. karine
     
    Tu veux dire que je dois faire comme ça ?

    PipedInputStream in=new PipedInputStream();
    PipedOutputStream pipe=new PipedOutputStream(in);
    connect(in);
    connect(pipe);
    0
  7. karine
     
    OK, j'ai trouvé, c'était
    pipe.connect(in);
    in.connect(pipe);

    Mais maintenant j'ai une autre erreur, je mets le code :
    public  PipedInputStream relayBinary() throws IOException 
        {
    	byte[] buf=new byte[1024];
           
    	PipedInputStream in=new PipedInputStream();
    	PipedOutputStream pipe=new PipedOutputStream(in);
    	pipe.connect(in);
    	in.connect(pipe);
    	
    	int n;
    
    	while (true) {
    	    n=fromWebBin.read(buf);
    	    if (n==-1) break;
    	    if (buf[0]==10 && cr) {
    	    	sout.write(buf, 1, n-1);
    		
    		pipe.write(buf, 1, n-1);
    		
    	    }
    	    else {
    	    	sout.write(buf, 0, n);
    		
    		pipe.write(buf, 0, n);
    		
    	    }
                cr=false;
    	}
    	pipe.close();
    	return in;
        } // !relayBinary
    
    public void envoi_reponseWeb_au_client() {
    PipedInputStream pipe = relayBinary();
    	
    			
    InputStreamReader input = new InputStreamReader(pipe);
    			
    Interpreteur interprete = new Interpreteur(input, url); 
    		}
    }
    


    et là j'ai l'erreur java.io.IOException: Already connected à la ligne
    pipe.connect(in);

    J'y comprends rien !!
    0
    1. jebok Messages postés 371 Date d'inscription   Statut Membre 51
       
      A mon avis, il suffit de supprimer la ligne
      pipe.connect(in);

      car la ligne écrite juste au-dessus fait exactement la même chose et apparemment Java n'aime pas faire 2 fois la même chose...
      0
  8. karine
     
    Merci mamiemando mais j'ai abandonné cette histoire de pipe.

    Je me retourne le cerveau depuis le début de la semaine !

    Donc j'ai tout effacé et je recommence.

    mais merci quand même
    0
  9. vorax
     
    Et ba! Il doit en avoir une grosse pour te retourner le cerveau... ok je sors...
    0