Envoyer un objet (client / Serveur)

Résolu
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 - 20 août 2006 à 10:48
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 - 20 août 2006 à 13:20
Salut :

Je veux savoir comment envoyer un objet (en particulier un objet "Image") à travers une connexion client / serveur.
----------------------------------------------------------------------------------------------
J'ai pensé a envoyé un fichier dépuis le serveur vers le client contenant l'image puis à extraire un objet "Image".

Mon application a besoin d'un objet "Image" non pas de fichier.
----------------------------------------------------------------------------------------------
Et Merci ...

4 réponses

tucobouch Messages postés 194 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 1 mai 2009 50
20 août 2006 à 11:33
Salut!

En Java, tu peux facilement sauvegarder des objets vers un flux réseau ou sur le disque. Pour cela, on peut utiliser la Serialization. La serialisation permet d'écrire un objet (en fait, sauvegarde tous les champs de l'objet) et de pouvoir le recharger a l'identique au moment où il a été sauvegardé. C'est trés puissant et simple a mettre en oeuvre.

Mise en oeuvre :
Il suffit que la classe de ton objet implémente l'interface Serializable (de java.io). C'est une interface vide mais elle permet a la JVM de savoir que ta classe pourra etre serialisée.
Pour ecrire un objet dans un flux, par exemple dans un fichier, c'est fait en 3 lignes ! :
FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(monObjet); //ecrit l'ojett

De meme, pour recuperer l'objet :
FileInputStream fis = new FileInputStream("t.tmp");
ObjectInputStream ois = new ObjectInputStream(fis);
monObjet= (ClasseMonObjet) ois.readObject();

Ici, monObjete est du type ClasseMonObjet qui doit hériter de Serializable

public class ClasseMonObjet implements Serializable
{
etc...
};

Dans ces exemples, les sauvegarde/chargement sont dans des fichiers mais tu peux facilement faire ça dans une Socket (suffit de remplacer fis et fos vers les flux de ta socket). Tu pourra ainsi "transporter" des objets instanciés sur ton serveur vers ton client en quelques lignes. C'est super pratique!

- [TucoBouch] -
1
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
20 août 2006 à 13:10
Salut :

Merci j'ai presque la même idée mais cette dernière ralentisse l'application.
Je veux envoyer un objet sur un flux et le récupérer à la volée sans passer par le disque (càd sans le sauvegarder en fichier).
Si cela est possible.
Sinon il faut se contenter de la première solution.
 
Et Merci ...
1
tucobouch Messages postés 194 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 1 mai 2009 50
20 août 2006 à 13:16
Sans passer par le disque : c'est exactement pareil :

en considerant que socket est ta Socket vers ton client sur le serveur :

Pour envoyer l'objet :

ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(monObjet);

Pour recevoir sur le client :

En considerant que server est la Socket vers ton serveur :

ObjectInputStream ois = new ObjectInputStream(server.getInputStream());
monObjet= (ClasseMonObjet) ois.readObject();

Tu vois, c'est hyper simple

- [TucoBouch] -
1
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
20 août 2006 à 13:20
Seulement je veux vous dire MERCI ...
1
Rejoignez-nous