Java.io.IOException: Pipe not connected

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

  • Votes
  • Date
  • Date décroissante
  1. Ca se déclenche à la ligne

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


    dans la methode relayBinary.

    Comment je peux corriger ça ?

    merci !
    1. heu, c'est quoi le connect ?

      j'ai jamais fait de pipe avant, donc je suis un peu paumée ;-)
      1. Tu veux dire que je dois faire comme ça ?

        PipedInputStream in=new PipedInputStream();
        PipedOutputStream pipe=new PipedOutputStream(in);
        connect(in);
        connect(pipe);
        1. 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 !!
          1. 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...
        2. 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
          1. Et ba! Il doit en avoir une grosse pour te retourner le cerveau... ok je sors...