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

avec Java Discussion :

Classe sérialisée


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 51
    Points : 41
    Points
    41
    Par défaut Classe sérialisée
    Bonjour, j'ai un exemple
    Si une instance de classe Beagle a été crée, aprés qu'on la sérialise et désérialise...
    le résultat retourné sera : "ada" , moi je dis prkoi pas : "ad" qu'est ce qui s'est passé lors de la sérialisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Animal{
        Animal(){
        	System.out.print("a");}
       }
     
    class Dog extends Animal implements Serializable {
        Dog(){ System.out.print("d");}}
     
    public class Beagle extends Dog{
    	public static void main(String[] args) {
    		new Beagle();
    	}
    }
    MErci .

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 996
    Points
    7 996
    Par défaut
    La en l'occurence ton code il ne fait strictement rien du tout.

    C'est juste 3 classes comme ca, et par chance, au mieux en les utilisant telle quelles, tu pourras voir apparaitre dans la console, d ou a... selon ce que tu en fais.

    Bref je ne sais pas ce que tu cherche a faire, mais c'est pas comme ca

    Enfin sinon dans le doute :

    http://ydisanto.developpez.com/tutor...ation-binaire/

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 51
    Points : 41
    Points
    41
    Par défaut
    j’espère que là c'est plus clair cher ami : )

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 996
    Points
    7 996
    Par défaut
    Non je ne vois toujours pas le rapport avec une sérialisation.

    Et ton code fournit comme résultat : "ad" ce qui est le résultat attendu vu que le constructeur de dog appelle celui de animal ( implicitement ), puis le sien. Donc ca doit donner "ad".

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 51
    Points : 41
    Points
    41
    Par défaut
    c'est une question de certification ocjp6.. moi aussi je comprend pas prkoi "ada" .. voici l'imprime d'écran de la question
    Images attachées Images attachées  

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 996
    Points
    7 996
    Par défaut
    Sauf que dans ta question initiale, il y'a aucun main. Donc les comportement tu peux faire ce que tu veux. Mais comme tu as rajouter un main avec un new Beagle(), alors tu obtiens "ad" ce qui est normal comme expliqué plus haut.

    Cela dit, si tu veux obtenir absolument "ada" dans la console, il faut donc au moins sérialisé puis dé-sérialisé ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public class Beagle extends Dog{
     
    	public static void main(String[] args) throws IOException, ClassNotFoundException {
    		//System.err.println("Instancie un Beagle");
    		Beagle b = new Beagle();
     
    		//System.err.println("Serialise");
     
    		FileOutputStream fos = new FileOutputStream("personne.serial");
     
    		// création d'un "flux objet" avec le flux fichier
    		ObjectOutputStream oos= new ObjectOutputStream(fos);
    		oos.writeObject(b);
    		oos.close();
     
    		//System.err.println("Deserialise");
     
    		FileInputStream fis = new FileInputStream("personne.serial");
     
    		// création d'un "flux objet" avec le flux fichier
    		ObjectInputStream ois= new ObjectInputStream(fis);
    		b = (Beagle) ois.readObject();
    		ois.close();
     
    	}
    }

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Haaa, les joies de la serialization java et son non respect (ou plutot disons exception) aux bases du language. Voilà qui explique la bonne réponse ^^.

    Pour être plus concret, il faut décortiquer l'énoncé.

    "Si une instance de Beagle est créée":
    évidement, ça affiche ad
    "puis sérialisée":
    rien ne se passe, on ne "construit" rien pendant la sérialisation
    "puis désérialisée":
    là ça deviens tordu, car la désérialisation est capable de créer des objets java SANS appeler leur constructeur
    Il faut se référer à la doc officielle sur la méthode readObject
    http://docs.oracle.com/javase/7/docs...input.html#961

    point 11 du processus: "le constructeur sans argument du premier parent non serializable est appelé". En l'occurence ici, il s'agit du constructeur Animal.

    Note que les autres constructeur ne sont pas appelés (exception aux règles du language), donc ni le constructeur de Beagle, ni celui de Dog ne sont appelés.

    Du coup ca génère seulement un a
    Du coup la réponse finale est ada

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 51
    Points : 41
    Points
    41
    Par défaut
    c'est bien clair mnt gracias

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

Discussions similaires

  1. Enregistrer une classe sérialisée dans un fichier
    Par Despirithium dans le forum Débuter
    Réponses: 7
    Dernier message: 29/01/2013, 15h34
  2. Réponses: 1
    Dernier message: 14/09/2007, 15h24
  3. débutant XMLEncoder soucis sérialisation classes
    Par superpigeon dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 26/10/2006, 14h24
  4. [C#] Comment sérialiser une classe abstraite?
    Par akkaBella dans le forum C#
    Réponses: 1
    Dernier message: 14/09/2006, 16h12
  5. Réponses: 1
    Dernier message: 28/03/2006, 22h08

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