Bonjour,

Vraissemblablement un classique. J'ai une fonction qui m'écrit dans un Writer. J'ai une autre fonction qui doit lire ce contenu à l'aide d'un Reader.

Naïvement je fais :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
  CharArrayWriter w = new CharArrayWriter();
  f( w );
  g( new CharArrayReader(w.toCharArray() ) );
Sauf que si le contenu a écrire est très volumineux, l'opération consomme beaucoup mémoire.

L'autre solution que j'avais expérimenté est celle exploitant un pipe, illustré grossièrement comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
   final PipedReader r = new PipedReader();
   final PipedWriter w = new PipedWriter(r);
 
   new Runnable() {
     @Override
     public void run() {
       f(w);                 
     }                
   };
   g(r);
C'est pas mal car les deux fonctions travaillent en flux tendu, mais le thread de l'écrivain peut être délicat.

Avez-vous d'autres techniques sur le sujet ?

Thx.