Rechercher : dans
Par :

[java] probleme avec InputStream

Dernière réponse le 28 jun 2005 à 10:54:31 karine, le 24 mai 2005 à 15:26:49 
 Signaler ce message aux modérateurs

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));

le probleme c'est que le deuxieme inputstream est vide !
le premier a pris toutes les données.

Comment faire ?
Merci

Meilleures réponses pour « [java] probleme avec InputStream » dans :
[Firefox] plugin Java Jre de Sun VoirA) Les différentes variantes Java chez Sun B) Installation sous Mandriva Limited Edition 2005 ETAPE 1 ETAPE 2: Création du lien symbolique C) Installation sous debian lenny D) Installation sous ubuntu hardy heron A) Les différentes...
Installer Java sous Ubuntu VoirPar défaut, Firefox n'est pas fourni avec Java. Voici comment procéder pour l'installer: Ouvrez un terminal (Menu Applications > Accessoires > Terminal) et tapez: sudo aptitude install sun-java6-jre sun-java6-plugin ou sudo aptitude install ...
[Logiciel libre] Installation firefox 2.0+java+flash VoirInstallation firefox 2.0+java+flash en ligne de commande A. INTRODUCTION B. INSTALLATION FIREFOX 1. Création d'environnement 2. Téléchargement et vérification de la signature 3. Installation de Firefox 4. Démarrage de l'application C....
Télécharger Java Runtime Environment VoirJava Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des personnes dans le monde entier, de calculer les intérêts de votre prêt immobilier ou de visualiser des images en 3D. Ces...
Java - Les types de données VoirLes primitives Java est un langage orienté objet, c'est-à-dire que les éléments manipulés sont des classes, ou plus exactement des objets, c'est-à-dire des instances de classes. Toutefois ces objets contiennent des données possèdant un type (et...
Java - Premier programme VoirPremière application avec Java La première chose à faire est de créer un simple fichier texte (sans mise en forme) et de taper les quelques lignes suivantes : // Votre premiere application en Java class FirstApp { public static void main...
J2EE - Java 2 Enterprise Edition VoirIntroduction au Java Framework Le «Java Framework» (Java 2 Platform) est composé de trois éditions, destinées à des usages différents : J2ME : Java 2 Micro Edition est prévu pour le développement d'applications embarquées, notamment sur des...

1

TuXor, le 24 mai 2005 à 15:32:12

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 ^^'

Répondre à TuXor

2

karine, le 24 mai 2005 à 15:39:22

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 !

Répondre à karine

3

karine, le 24 mai 2005 à 15:47:21

En fait, je suis un peu bloquée.

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 !

Répondre à karine

4

choubaka, le 24 mai 2005 à 20:42:05

C'est en effet un peu confus ...
Chouba,
Pochard d'assaut .. 

Répondre à choubaka

5

karine, le 25 mai 2005 à 10:09:30

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.

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 !

Répondre à karine

6

choubaka, le 25 mai 2005 à 10:30:02

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. Chouba,
Pochard d'assaut .. 

Répondre à choubaka

7

karine, le 25 mai 2005 à 10:52:26

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

Répondre à karine

8

choubaka, le 25 mai 2005 à 11:44:00

Salut

ton objet SequenceInpustream attend-t'il bien un objet de type énumaration dans son constructeur ?
Chouba,
Pochard d'assaut .. 

Répondre à choubaka

9

karine, le 25 mai 2005 à 11:47:49

Resalut choubaka !

Oui, il admet bien un type Enumeration.

Qu'est-ce que tu en penses ?

Répondre à karine

10

choubaka, le 25 mai 2005 à 11:49:16

C'est ça ..

<? extends java.io.InputStream>

que je comprends pas dans l'erreur
Chouba,
Pochard d'assaut .. 

Répondre à choubaka

11

lacour, le 27 jun 2005 à 12:03:06

J'ai le même genre de problème. Avez vous trouvé une solution??

Répondre à lacour

12

 HackTrack, le 28 jun 2005 à 10:54:31

A ta place, je créerai une classe qui étend la classe Thread.

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

Répondre à HackTrack