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

Entrée/Sortie Java Discussion :

Serialisation/Deserialisation de c++ à Java


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut Serialisation/Deserialisation de c++ à Java
    Bonjour,

    Je dois coder deux applications :
    - une appli cliente en c++,
    - une appli serveur en java.

    L'appli c++ sérialise une trame dans un buffer qu'elle envoi à l'appli java par socket.
    Je reçoit bien la trame, mais je n'arrive pas à désérialiser le flux d'entrée.
    J'obtiens l'erreur : "invalid stream header : 0102FDFD" lors de la création de mon objet ObjectInputStream.
    Hors ce "stream header" n'est pas un header mais les données de ma trame envoyée via l'appli c++.
    Je ne comprend pas quel header il s'attend à trouver....


    J'ai vraiment l'impression que la sérialisation est complètement incompatible entre java et c++...
    Je ne sais vois plus du tout comment faire en java pour réussir a lire ce satané inputstream... et qu'il arrive a me le désérialiser....

    Merci d'avance pour votre aide.

    Shaina

  2. #2
    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
    Citation Envoyé par Shaina Voir le message
    J'ai vraiment l'impression que la sérialisation est complètement incompatible entre java et c++...
    C'est exactement ça. La sérialisation par défaut de Java est incompatible avec tout le reste.
    (C'est d'ailleurs la même chose avec tous les langages, pas seulement Java.)

    Je ne sais vois plus du tout comment faire en java pour réussir a lire ce satané inputstream...
    Ben, octet par octet. En utilisant un BufferedInputStream en général pour éviter les goulots d'étranglement.

    et qu'il arrive a me le désérialiser....
    Ah mais il le fera pas tout seul, tu sais. C'est toi qui sait ce que ces octets veulent dire et c'est toi qui sait comment tu dois t'en servir pour créer l'objet Java qu'ils représentent.


    Il existe des outils pour que différents langages puissent s'échanger des objets correctement par sérialisation, seulement la sérialisation simple de Java n'en est pas une (elle existe depuis bien avant ces outils, et n'était prévue que pour faire du Java <=> Java).
    - Dans le temps on avait CORBA.
    - Maintenant, ce qui se fait, c'est passer par XML : transformer ses objets en XML, transmettre le XML, et transformer le XML en objet.
    Côté Java, ça se fait avec les outils JAXB. Côté C++, j'en sais rien, 'faut regarder.
    - Il y en a sûrement d'autres, mais étant spécialisé dans le web 2.0 et le bling bling, je fais surtout dans la transmission XML.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    pour transmettre des données entre plateformes hétérogènes on peut aussi opérer "à l'os" avec les Buffers de java.nio.
    Si le protocole (le format des données échangées) est bien connu à l'avance on peut décoder des records relativement simples venus de langages comme C dans des Buffers. Il y a beaucoup de contorsions (comme poid-fort/poid-faible, mode codage caractères,...) mais on peut y arriver.

  4. #4
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut
    ok, je vous remercie !
    Je vais voir ce que je peux faire en faisant mon propre "archiveur" avec les bufferInputStream dans un premier temps!

  5. #5
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    il existe une autre solution, c'est de faire la sérialisation compréhensible par java.

    Maintenant cela dépend de ce que tu veux sérialiser, il faut évidemment en java un équivalent des objets c++ que tu sérialises !
    J'ai codé une sérialisation dans le cadre de la communication d'une application Progress 4GL vers du java, et cela fonctionne bien.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [XML]Generateur de code serialisation/deserialisation
    Par clincks dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 26/08/2007, 11h51
  2. [DEBUTANT][Serialisation] Flash 9 et java
    Par magnus2005 dans le forum Flash
    Réponses: 5
    Dernier message: 27/04/2007, 12h28
  3. Réponses: 3
    Dernier message: 07/01/2007, 16h48
  4. [Serialisation]Serialisation / Deserialisation.
    Par neXistPa dans le forum Général Java
    Réponses: 6
    Dernier message: 29/11/2005, 07h52
  5. [Info]Sérialisation / Désérialisation...
    Par onlytoine dans le forum Général Java
    Réponses: 3
    Dernier message: 27/08/2005, 21h58

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