IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Envoyer objet par Bluetooth


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Par défaut Envoyer objet par Bluetooth
    Bonjour,
    Je réalise une application bluetooth. Actuellement, je peux envoyer des chaines de caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public static void sendToClient(String msg){
        	PrintWriter pWriter=new PrintWriter(new OutputStreamWriter(outputStream));
        	pWriter.write(msg);
        	pWriter.flush();
        	//System.out.println(msg);	
    	}
    Mais je souhaite pouvoir envoyer plus largement des objets.
    Pour envoyer un objet il faut qu'il soit serializable, puisque les échanges se font en binaire. Jusqu’à présent ça fonctionne bien puisqu'un String est serializable, mais je souhaite envoyer des objets de type SimpleEntry, et là, ça bloque.

    Y-a-t-il un moyen de sérializer un SimpleEntry, ou existe-t-il un objet similaire serializable ?

    Merci par avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Par défaut
    Je viens de trouver quelque chose : http://stackoverflow.com/questions/1...-via-bluetooth

    Un malin s'amuse a serializer ses object en JSON.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Gson gson = new Gson();
    MyClass object = gson.fromJson(json, MyClass.class);
     
    // Serialize an object:
     
    Gson gson = new Gson();
    String objectString= gson.toJson(myObject);
    J'avoue que c'est pas mal trouvé... est ce une bonne solution ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Par défaut
    Ah non en fait, ça ne fonctionne pas, déjà parce que je ne souhaite pas sérializer maclasse.class, et ensuite parce que l'objet GSON est introuvable.

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur Java/Scala
    Inscrit en
    Octobre 2007
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Scala

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 086
    Par défaut
    Utiliser la serialisation Json est en effet une bonne idée.

    Gson est une librairie de serialisation Json développée par Google.
    Il te faudra l'ajouter a ton classpath (manuellement ou via un outil du genre Maven?) car elle n'est pas de base dans le JDK.


    Tu ne serialises pas MyClass, tu serialises une instance de MyClass (tu peux utiliser SimpleEntry.class a la place ou tout autre classe).


    Ce code permet de deserializer l'objet et de transformer l'objet json en objet Java:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyClass object = gson.fromJson(json, MyClass.class);
    Il est nécessaire de préciser MyClass.class car sinon Gson ne sait pas en quel type il doit deserializer le Json. Il faut que tu mettes le type qui est a l'origine de l'objet.

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur Java/Scala
    Inscrit en
    Octobre 2007
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Scala

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 086
    Par défaut
    Accessoirement Gson est une librairie de premier choix pour la serialisation Json.

    Sinon la librairie Jackson est aussi réputée.
    Après il y a plein d'autres possibilités: JAX-B, XStream...


    L'avantage de l'utilisation du Json est que le Json est interroperable dans tous les langages alors que le format de serialization Java est propriétaire.
    Du coup en utilisant du Json tu pourras développer une appli bluetooth et une appli serveur dans 2 langages différents si besoin.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Oui enfin, la sérialisation Java reste plus simple et plus efficace que la sérialisation JSON -_-°. S'il faut parler avec des technos non-Java je veux bien, mais dans les technos non-Java, les classes des objets à faire passer n'existent pas -_-°.

    C'est quoi, ça, SimpleEntry ? Assez souvent il suffit d'ajouter implements Serializable pour que ça devienne sérialisable. Pas besoin de chercher midi à quatorze heure.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Par défaut
    Bonjour à vous,
    Alors oui, JSON est standart, mais je n'ai pas réussi a mettre en place l'exemple que j'ai copié dans mon deuxième post.

    D'un autre côté, mon appli est destiné a recevoir la connexion de téléphones android, donc c'est la même techno..

    SimpleEntry est une classe standard de java permettant d'avoir un couple (key, value).

    SimpleEntry n'est pas une classe que j'ai créé, donc je ne peux pas ajouter implements Serializable.

    De plus, pour le cas du JSON, je ne sais pas si ça va marcher de mettre "SimpleEntry.class", puisque ce n'est pas une de mes classes...

  8. #8
    Membre Expert
    Homme Profil pro
    Développeur Java/Scala
    Inscrit en
    Octobre 2007
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Scala

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 086
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Oui enfin, la sérialisation Java reste plus simple et plus efficace que la sérialisation JSON -_-°. S'il faut parler avec des technos non-Java je veux bien, mais dans les technos non-Java, les classes des objets à faire passer n'existent pas -_-°.

    C'est quoi, ça, SimpleEntry ? Assez souvent il suffit d'ajouter implements Serializable pour que ça devienne sérialisable. Pas besoin de chercher midi à quatorze heure.

    La sérialisation Java n'est pas plus simple et par défaut elle n'est pas spécialement efficace non plus en plus de n'être pas interroperable.
    Elle n'est pas non plus simple a customiser (cf les methodes privées) et demande de connaitre les bonnes pratiques en terme de versionning et autre...)

    Après c'est vrai que pour le besoin actuel ça peut largement suffire.

    Mais je ne trouve pas que rajouter Gson a son classpath et 3 lignes de code hyper simple soit vraiment compliqué à gérer


    poussinvert quand tu fais transiter des objets sur le réseau c'est tout de même mieux si tu as le contrôle de ces objets.
    A noter que Gson et tous les frameworks Json serialisent très bien les objets de type Map directement mais il y a certaines précautions a prendre avec les generics.

    Voir ce lien:
    http://stackoverflow.com/a/12117517/82609

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoyer fichier par Bluetooth Xe7
    Par curt25 dans le forum Composants VCL
    Réponses: 0
    Dernier message: 06/10/2014, 12h54
  2. Envoyer fichier par bluetooth, PC vers mobiles
    Par dolnar dans le forum Windows Forms
    Réponses: 6
    Dernier message: 25/11/2009, 22h29
  3. Envoyé donnée par bluetooth sur samsung
    Par Laupif dans le forum Java ME
    Réponses: 1
    Dernier message: 22/11/2009, 16h48
  4. Réponses: 2
    Dernier message: 19/09/2007, 10h21
  5. Réception de données envoyées par bluetooth
    Par poupouille dans le forum Développement Mobile en Java
    Réponses: 6
    Dernier message: 29/07/2007, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo