[java] probleme avec InputStream
karine
-
Utilisateur anonyme -
Utilisateur anonyme -
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
le probleme c'est que le deuxieme inputstream est vide !
le premier a pris toutes les données.
Comment faire ?
Merci
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));
le probleme c'est que le deuxieme inputstream est vide !
le premier a pris toutes les données.
Comment faire ?
Merci
A voir également:
- [java] probleme avec InputStream
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Eclipse java - Télécharger - Langages
12 réponses
A ta place, je créerai une classe qui étend la classe Thread.
Exemple:
Modifie ceci dans ton code:
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
Exemple:
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
Salut, tu peux deja essayer de faire au plus simple,
par exemple de copier les données dans un tampon avant de les utiliser; et ainsi pouvoir les dupliquer a volonté.
si tu peux les récuperer sous forme de string, il ne devrait pas y avoir de problème.
En espérant ne pas dire de conneris ^^'
par exemple de copier les données dans un tampon avant de les utiliser; et ainsi pouvoir les dupliquer a volonté.
si tu peux les récuperer sous forme de string, il ne devrait pas y avoir de problème.
En espérant ne pas dire de conneris ^^'
Mais moi je tiens à avoir un InputStream.
Je crois que je vais modifier mon constructeur pour qu'il renvoie ce qu'il a lu au deuxième.
Ca pourrait marcher ...
Merci quand meme TuXor !
Je crois que je vais modifier mon constructeur pour qu'il renvoie ce qu'il a lu au deuxième.
Ca pourrait marcher ...
Merci quand meme TuXor !
En fait, je suis un peu bloquée.
J'ai donc ça :
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 !
J'ai donc ça :
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 !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Essayons de clarifier un peu ...
J'ai un inputStream, que j'utilise d'abord avec fromWebBin pourle lire et faire un certain traitement dessus que je ne vous ai pas mis ici.
Et avec ce même inputStream, je voudrais appeler le constructeur de ma classe Interpreteur.
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 un inputStream, que j'utilise d'abord avec fromWebBin pourle lire et faire un certain traitement dessus que je ne vous ai pas mis ici.
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 !
Salut
il est fort probable que c'est un problème de visibilité... voir oùtu as déclaré ton inputstream. Peut être est-il nécessaire de le déclarer en attribut de classe et non pas dans une méthode.
il est fort probable que c'est un problème de visibilité... voir oùtu as déclaré ton inputstream. Peut être est-il nécessaire de le déclarer en attribut de classe et non pas dans une méthode.
J'ai trouvé une technique qui pourrait peut etre marcher mais j'ai une erreur à la compilation.
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
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
salut
ton objet SequenceInpustream attend-t'il bien un objet de type énumaration dans son constructeur ?
ton objet SequenceInpustream attend-t'il bien un objet de type énumaration dans son constructeur ?