package pbt.iotest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PipedReader;
import java.io.PipedWriter;

/**
 * Pipe, permet d'illustrer l'utilisation d'un 
 * {@link PipedWriter} et d'un {@link PipedWriter}. 
 * 
 * Remarque: C'est exemple est purement académique; sans clore 
 * le flux d'écriture, ce code est bloquant. on lui préfèrera 
 * l'exemple {@link PipedReaderWriter}. 
 *  
 * @author pbt
 */
public class Pipe {

    public static void main(String[] args) {
	PipedReader reader ; 
	PipedWriter writer ; 
	BufferedReader bufferedReader ;
	String chaineLue ; 

	try { 
	    writer = new PipedWriter() ; 
	    reader = new PipedReader(writer) ;
	    bufferedReader = new BufferedReader( reader) ;

	    // J'écris dans le pipe ... 
	    writer.write("Format des Paquets\n" +
		    "Le paquet IP est imprimé sur un petit rouleau de papier,\n" +
		    "en hexadécimal, les octets séparés par du noir et du blanc.\n" +
		    "Le rouleau de papier est enroulé autour d'une des pattes \n" +
		    "du pigeon voyageur. \n" +
		    "Une bande de scotch est utilisée pour sécuriser " + 
		    "les bords du paquet.\n" +
		    "La bande passante est limitée par la taille de la patte.\n" +
		    "Le MTU est variable, et, paradoxalement, \n" +
		    "augmente généralement avec l'age du pigeon.\n" +
		    "Un MTU typique est de 256 milligrammes. \n" +
		    "Il peut être nécessaire de compléter certains paquet. \n" +
		    "Àprès réception, la bande de scotch est ôtée et\n" +
		    "la copie papier du paquet est numérisée et transformée \n" +
		    "dans un format électronique transmissible.\n" +
		    "\n(Extrait de la RFC1149, traduction)" ) ;
	    writer.close() ;

	    // Je lis dans le pipe
	    while ( (chaineLue=bufferedReader.readLine()) != null ) {
		System.out.println(chaineLue);
	    }
	    bufferedReader.close() ; 				 
	} catch ( IOException ioe ) {
	    System.out.println("Problème d'E/S");
	    System.exit(1) ; 
	}

    }

}
