Fluxs Java

Fluxs Java - Java - Programmation

Marsh Posté le 01-11-2008 à 17:05:04    

Bonjour,
 
Je ne maîtrise pas bien les InputStream et les OutputStream de java.io
 
Dans mon appli (un proxy HTTP), j'ai une méthode

Code :
  1. void filter(InputStream in,OutputStream out)

qui applique un ensemble de filtres et modifie le OutputStream.
 
mon but est celui-ci :

Code :
  1. InputStream(in) --->  [Filtre1] -> [Filtre2] -> ... -> [Filtren] ---> OutputStream(out)


 
Comment puis-je faire ceci avec les InputStream/OutputStream?
J'ai vu qu'il y a les PipedInputStream PipedOutputStream, mais j'ai du mal à voir comment les utiliser avec "in" et "out"
 
 
merci de vos réponses

Reply

Marsh Posté le 01-11-2008 à 17:05:04   

Reply

Marsh Posté le 01-11-2008 à 17:09:07    

Il n'y a que des filtres appliqués entre les données de l'IS et les données de l'OS? il n'y a pas de "vraie" opération à un moment?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 01-11-2008 à 17:15:49    

sisisi,  
en fait j'ai pas été assez clair.
 
Chaque filtre accepte un InputStream et un OutputStream, et est susceptible d'apporter des modifications.
 
merci de ta rapidité

Reply

Marsh Posté le 01-11-2008 à 17:22:27    

bigears a écrit :

sisisi,  
en fait j'ai pas été assez clair.
 
Chaque filtre accepte un InputStream et un OutputStream, et est susceptible d'apporter des modifications.
 
merci de ta rapidité


Pourquoi chaque filtre accepterait à la fois un IS et un OS? Ca veut pas dire qu'il faut retransformer un OS en IS entre chaque filtre? Pour avoir un truc comme ça:

IS -> [filtre 1] -> OS -- ? -> IS [filtre 2] -> OS -- ? -> IS [filtre 3] -> OS


?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 01-11-2008 à 17:25:43    

Ouep en fait ça serait ce type chainage qu'il faudrait que je puisse obtenir, mais j'ai du mal a voir comment implémenter ça

Reply

Marsh Posté le 01-11-2008 à 17:28:32    

bigears a écrit :

sisisi,
en fait j'ai pas été assez clair.

 

Chaque filtre accepte un InputStream et un OutputStream, et est susceptible d'apporter des modifications.

 

merci de ta rapidité


Pourquoi chaque filtre accepterait à la fois un IS et un OS? Ca veut pas dire qu'il faut retransformer un OS en IS entre chaque filtre? Pour avoir un truc comme ça:

IS -> [filtre 1] -> OS -- ? -> IS [filtre 2] -> OS -- ? -> IS [filtre 3] -> OS


?

 

Après je sais pas comment c'est géré exactement chez toi, mais habituellement sur des workflows genre requête/réponse, il y a une stack d'inputstreams, une opération effectuée puis une stack d'outputstream, et donc pour créer tes stack il suffit de faire de la décoration de l'IS ou de l'OS (en fonction du filtrage et des transformations à apporter) en subclassant FilterOuputStream, pour obtenir un truc comme ça:

InputStream  -> [FilterInputStream 1]  -> [filterInputStream 2]  -> [FilterInputStream 3]  -> [FilterInputStream 4] ---
                                                                                                                       ||
                                                                                                                 (InputStream)
                                                                                                                       ||
                                                                                                                       \/
                                                                                                                  [Operation]
                                                                                                                       ||
                                                                                                                 (OutputStream)
                                                                                                                       ||
                                                                                                                       \/
OutputStream <- [FilterOutputStream 1] <- [FilterOutputStream 2] <- [FilterOutputStream 3] <- [FilterOutputStream 4] ---


(dans certains modèles le même objet peut être à la fois un FilterInputStream et un FilterOutputStream, ce qui permet potentiellement de bypasser complètement l'Operation et tous les filtres situés "plus haut" sur la stack, mais pour faire ça en java il faut créer des classes custom dans la mesure où OutputStream et InputStream sont des classes abstraites et non des interfaces, si je ne m'abuse)


Message édité par masklinn le 01-11-2008 à 17:30:16

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 01-11-2008 à 17:41:55    

heu... j'ai p-e pas tout saisi sur ton dernier schéma mais je ne crois pas que ça corresponde à ce que je souhaite.
 
Je voudrais exécuter les filtres en série, les uns après les autres, l'ordre ayant une importance sur le résultat obtenu.
 
En fait je travaille sur un code existant, et les concepteurs de ce proxy avaient définis leurs propres type d'input/outputStream sans aucun liens avec ceux de java.io. Je souhaite pouvoir utiliser les Input/OutputStream de java.io au sein de mes filtres.

Reply

Marsh Posté le 01-11-2008 à 22:15:18    

bon en fait j'ai résolu mon problème. Je suis passé par les PipedInputStream / PipedOutputStream.  
 
 
A la fin je recopie le dernier PipedInputStream dans le OutputStream

Reply

Sujets relatifs:

Leave a Replay

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