|
|
|
|
Bonjour,
Voici mon probleme :
je reçois des données d'une socket. Et je voudrais effectuer deux traitements différents sur cette socket.
Je fais donc deux inputstream
InputStream i = socket.getInputStream(); InputStream j = socket.getInputStream(); InputStreamReader input = new InputStreamReader(i); fromWebBin = new DataInputStream(new BufferedInputStream(j));
En fait, je suis un peu bloquée.
InputStream i = socket.getInputStream();
fromWebBin = new DataInputStream(new BufferedInputStream(i));
while (true) {
str=readLine(fromWebBin);
}
Comment je peux faire pour sauvegarder le str dans un truc du genre outputstream pour ensuite le retransformer en inputstream pour le deuxieme traitement ? Je sais pas si je suis très claire ... Merci beaucoup ! |
Essayons de clarifier un peu ...
InputStream i = socket.getInputStream();
fromWebBin = new DataInputStream(new BufferedInputStream(i));
while (true) {
str=readLine(fromWebBin);
}
Et avec ce même inputStream, je voudrais appeler le constructeur de ma classe Interpreteur. InputStreamReader input = new InputStreamReader(i); Interpreteur interprete = new Interpreteur(input, url); Problème ! input est vide ! Le premier traitement a "aspiré" toutes les données. Ce que je voudrais faire : faire passer les infos lues par fromWebBin à mon Interpreteur sous forme d'un InputStreamReader. Est-ce que c'est plus clair ? Et comment faire ça ? Merci ! |
J'ai trouvé une technique qui pourrait peut etre marcher mais j'ai une erreur à la compilation.
InputStream i = socket.getInputStream();
fromWebBin = new DataInputStream(new BufferedInputStream(i));
Vector<String> vecFlux = new Vector<String>();
while (true) {
str=readLine(fromWebBin);
vecFlux.add(str);
}
Enumeration listeFlux = vecFlux.elements();
SequenceInputStream poeme = new SequenceInputStream(listeFlux);
InputStreamReader input = new InputStreamReader(poeme);
Interpreteur interprete = new Interpreteur(input, url);
et là j'ai l'erreur : Sources/Clients.java:391: warning: [unchecked] unchecked conversion found : java.util.Enumeration required: java.util.Enumeration<? extends java.io.InputStream> SequenceInputStream poeme = new SequenceInputStream(listeFlux); ^ 1 warning Est-ce que quelqu'un comprends ce que ça veut dire? merci |
A ta place, je créerai une classe qui étend la classe Thread.
public class HandlingThread extends Thread {
private StringBuffer buffer;
private String lineToHandle;
private boolean isActive;
public HandlingThread() {
super();
isActive = false;
}
public void run() {
isActive = true;
while (isActive) {
if(lineToHandle!=null){
handleInput(lineToHandle);
lineToHandle=null;
}
}
}
private void handleInput(String input){
//A implémenter par toi
}
public synchronized void addLine(String text){
lineToHandle = text;
buffer.append(lineToHandle);
buffer.append("\n\r");
}
}
Modifie ceci dans ton code:
InputStream i = socket.getInputStream();
HandlingThread hTh = new HandlingThread();
hTh.start();
while (true) {
str=readLine(fromWebBin);
hTh.addLine(str);
}
De cette manière, tu gardes une copie de l'input complet dans le thread et celui-ci effectue le traitement voulu de manière synchronisée. ;-) HackTrack |