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 :

[Sérialisaton] plusieurs points d'entrées


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut [Sérialisaton] plusieurs points d'entrées
    Bonjour,

    Tout d'abord... désolé si mon post n'est pas dans le bon endroit
    Je ne savais pas où me tourner.
    De plus je tiens à préciser que je reviens de la fac et des tutos...

    J'essaie d'intégrer la possibilité de sérialiser les objets de mon application mais je ne sais pas trop comment m'y prendre.

    Un programme java n'a qu'un seul point de départ, une seule classe qui a une méthode main...

    J'ai ma classe Main.java qui doit s'en charger mais j'ai rajouter les classe Sérializer et DeSérializer... Toutes deux pourvues d'une méthode main...

    Je suis perdue >.<

    Voici le code de la classe de sérialisation que j'ai récupérer de la FAQ.
    Je ne connais le java que depuis une petite semaine
    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
     
     
    package nutrical;
     
    import java.io.*;
     
    public class Serializer{
     
      public static void main(String argv[]) {
        Personne personne = new Personne("Dupond","Jean",175);
        try {
          FileOutputStream fichier = new FileOutputStream("personne.ser");
          ObjectOutputStream oos = new ObjectOutputStream(fichier);
          oos.writeObject(personne);
          oos.flush();
          oos.close();
        }
        catch (java.io.IOException e) {
          e.printStackTrace();
        }
      }
    }
    Est ce un problème d'avoir plusieurs main?

    Si non, il subsiste un problème à mon esprit fleurissant de l'apprentissage du Java *o*
    Comment pourrais je passer n'importe quel type d'objet dans cette méthode main?
    N'avoir qu'une seule classe de sérialisation plutot qu'une classe pour sérialiser Personne, une autre pour sérialiser des Bateaux, une autre pour sérialiser des Chiens...
    Est ce possible déjà? Normalement oui -_- Mais je ne vois pas comment...

    Sinon j'ai cru lire que lorsqu'on sérialisait une ArrayList... on ne sérialisait pas les objets en question...
    Ai-je mal lu?
    J'avoue être vraiment perdue malgré mes recherches... En fait, ce sont mes recherches qui 'mont perdue...

    Merci à vous
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  2. #2
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Est ce un problème d'avoir plusieurs main?
    Non.

    Comment pourrais je passer n'importe quel type d'objet dans cette méthode main ?
    Sais-tu comment passer un objet à la méthode main ?

    N'avoir qu'une seule classe de sérialisation plutot qu'une classe pour sérialiser Personne, une autre pour sérialiser des Bateaux, une autre pour sérialiser des Chiens...
    Plusieurs classes pour la sérialisation ce n'est pas un problème, une méthode main pour chaque sérialisation c'est... comment dire... audacieux.
    Je suppose que tu cherches à obtenir un processus du type : lire un objet > le modifier > l'écrire. Dans ce cas il est plus simple que les trois étapes soient contenues dans une seule méthode main (cela ne veut pas dire de mettre tout le code dans la méthode main).

    Un exemple simple :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    public class Main {
    	public static void main(String[] args) {
    		IOData io = new IOData("mon_repertoir");
     
    		Personne personne = io.readPersonne();
     
    		/* ... modifications ... */
     
    		io.writePersonne(personne);		
    	}
    }
     
    class IOData {
     
    	/**
             * répertoire par défaut qui contient tous les fichiers sérialisés.
             */
    	private String rep;
     
    	public IOData(String rep) {
    		this.rep = rep != null ? rep : "";
    	}
     
     
    	public Personne readPersonne() throws IOException {
    		ObjectInput in;
    		try {
    			in = new ObjectInputStream(new FileInputStream(rep +"personne.ser"));
    			return (Personne)in.readObject();
    		} finally {
    			in.close();
    		}
    	}
     
    	public void writePersonne(Personne personne) throws IOException {
    		ObjectOutput out;
    		try {
    			out = new ObjectOutputStream(new FileOutputStream(rep +"personne.ser"));
    			out.writeObject(personne);
    		} finally {
    			out.close();
    		}
    	}
    }

    Sinon j'ai cru lire que lorsqu'on sérialisait une ArrayList... on ne sérialisait pas les objets en question...
    Une ArrayList utilise la sérialisation dans une version plus subtile mais cela ne change rien sur le fond la liste obtenue après lecture correspond à celle qui a été écrite.

  3. #3
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    Bonjour et merci de votre réponse.
    Citation Envoyé par ngpub Voir le message
    Sais-tu comment passer un objet à la méthode main ?
    Si je réponds non?

    Je suppose que tu cherches à obtenir un processus du type : lire un objet > le modifier > l'écrire. Dans ce cas il est plus simple que les trois étapes soient contenues dans une seule méthode main (cela ne veut pas dire de mettre tout le code dans la méthode main).
    Oui je souhaites récupérer mes ArrayList (pas mal d'objets dans chaque classe donc je préférerais sérialiser une collection) et si jamais l'utilisateur en ajoute ou en modifie, j'aimerais qu'en fin de programme ou après chaque action particulière je resérialise ces ArrayList.


    Je dois faire une IOData et mettre dedans les sérialiseDesPersonnes, sérialiseDesChiens, sérialiseDesBateaux, désérialiseDesPersonnes?...

    Une ArrayList utilise la sérialisation dans une version plus subtile mais cela ne change rien sur le fond la liste obtenue après lecture correspond à celle qui a été écrite.
    Version plus subtile?
    Le code que j'utilise ne peut pas fonctionner pour les ArrayList?
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  4. #4
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Je dois faire une IOData et mettre dedans les sérialiseDesPersonnes, sérialiseDesChiens, sérialiseDesBateaux, désérialiseDesPersonnes?...
    Cela dépend du projet. Si tu es vraiment perdu, l'utilisation d'une classe IOData te permettra de faire fonctionner ton code, après une fois que tu maitrisera à toi de juger de la pertinence de la solution.
    Version plus subtile [de la sérialisation] ?
    Le code que j'utilise ne peut pas fonctionner pour les ArrayList?
    La fin de ma phrase était "cela ne change rien sur le fond la liste obtenue après lecture correspond à celle qui a été écrite", donc pas de problème.

  5. #5
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    Hum...
    Ca ne fonctionne pas mais je ne pense pas qu'il y ait d'erreurs générées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import java.util.ArrayList;
    import java.io.*;
    public class Main{
     
                public static void main(String[] args) throws IOException {
                    ArrayList<Aliment> desAliments = new ArrayList<Aliment>();
                    /*Aliment00*/desAliments.add(new Aliment("Batavia",false,25,"Légume"));
                    /*Aliment01*/desAliments.add(new Aliment("Pomme",false,52,"Fruit"));
                    /*Aliment02*/desAliments.add(new Aliment("Pain (baguette)",false,283,"Féculent"));
    (...)
                    IOData io = new IOData();
    		io.writeDesAliments(desAliments);
    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
    27
    28
    29
    30
    31
    32
    33
    34
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package nutrical;
    import java.io.*;
    import java.util.ArrayList;
     
    public class IOData {
    /**
             * répertoire par défaut qui contient tous les fichiers sérialisés.
             */
    	private String rep;
     
    	public IOData() {
    	}
    	public IOData(String rep) {
    		this.rep = rep != null ? rep : "";
    	}
     
     
        @SuppressWarnings("unchecked") //Pourquoi n'accepte t-il pas mes génériques?
            public void writeDesAliments(ArrayList<Aliment> desAliments) throws IOException {
    		ObjectOutput out = null;
    		try {
    			out = new ObjectOutputStream(new FileOutputStream(rep +"desAliments.ser"));
    			out.writeObject(desAliments);
    		} finally {
    			out.close();
    		}
    	}
    }
    Résultat de ce code... Je n'ai pas de fichier desAliments.ser...
    Bon ben je le crée à la main, peut être ne peut-il pas écrire dans un fichier qui n'existe pas (il ne le créerais pas s'il existe pas)
    Enfin bref, je me créer mon desAliments.ser, ré exécute mon projet...
    Et là miracle *o*
    même résultat --'

    Une idée sur le problème s'il vous plaît?
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  6. #6
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Je n'ai pas de fichier desAliments.ser
    Le fichier ne s'appellerait pas nulldesAliments.ser.
    Attention dans new FileOutputStream(rep +"desAliments.ser") la variable rep vaut nulle.

    Quant aux génériques, je ne vois pas le problème.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/06/2015, 14h37
  2. [Débutant] Plusieurs point d'entrée définis
    Par ivoratparis dans le forum C#
    Réponses: 1
    Dernier message: 30/01/2014, 16h34
  3. Plusieurs points d'entrée 2010
    Par Claude 3573 dans le forum C#
    Réponses: 0
    Dernier message: 01/12/2013, 15h51
  4. plusieurs modules ou plusieurs point d'entrées ?
    Par rimas2009 dans le forum GWT et Vaadin
    Réponses: 0
    Dernier message: 04/05/2011, 15h04
  5. [Google API v3] Calcul de distance entre plusieurs points
    Par akrogames dans le forum APIs Google
    Réponses: 1
    Dernier message: 08/04/2010, 17h35

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