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

Collection et Stream Java Discussion :

comment sérializer Arraylist


Sujet :

Collection et Stream Java

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut comment sérializer Arraylist
    Bonjour,
    Je débute dans la sérialization et je voudrais sérialiser une ArrayList .
    par exemple une classe classe1 qui va produire une liste A=[a,b,c] et utiliser cette liste dans une autre classe classe2
    liste C= A

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    En regardant les tutoriels disponibles avant de poster tu gagnerais du temps La sérialisation binaire en Java.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    bonsoir voila j'ai lu le tutorial et j'ai essayé de créer un petit exempel mais ça fonctionne pas
    j'ai deux classe C et D
    la classe C contient une valeur float C=9; j'ai sérailizer cette valeur dans un fichier window.se
    et je veux la récuperer dans la classe D
    voila le code
    classe D contient la valeur 9
    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
     
    package mustapha;
     
    import java.io.*;
     
     
    public class D {
      public D() {
      }
        public static void main(String[] args) {
      try {
     
     
     
      float C=9;
        FileOutputStream fos = new FileOutputStream("window.se");
                          ObjectOutputStream oos = new ObjectOutputStream(fos);
                          oos.writeFloat(C);
                          oos.flush();
     
                          oos.close();
     
     
                      System.out.println("Donnée sauvée: " +C);
      }
      catch (java.io.IOException e) {
     
                    }
     
     
     
        }
     
      }
    et je cherche à récuperer la valeur dans la classe C
    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
     
    package mustapha;
     
    import java.io.*;
     
     
    public class C {
      public C() {
      }
        public static void main(String[] args) {
     
          try {
         FileInputStream f = new FileInputStream("window.se");
                       ObjectInputStream  o =  new ObjectInputStream(f);
                      float g = o.readFloat();
                      o.close();
                      System.out.println("Donnée actuelle : " + g);  
     
     
          }
     
     
         catch(IOException o) {
    o.printStackTrace();
                     }
     
     
        }
     
      }
    voila l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    java.io.FileNotFoundException: window.se (Le fichier spécifié est introuvable)
    	at java.io.FileInputStream.open(Native Method)
    j'espere avoir une réponse merci

  4. #4
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    j'ai modifié le code par
    FileInputStream f = new FileInputStream("c:\\time.txt");

    et

    FileInputStream f = new FileInputStream("c:\\time.txt");


    voila l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    java.io.EOFException
    	at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2165)
    	at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2631)
    	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:734)
    	at java.io.ObjectInputStream.<init>(ObjectInputStream.java:253)
    	at mustapha.C.main(C.java:15)
    sur la ligne ObjectInputStream o = new ObjectInputStream(f);
    meme fichier time ne contient rien

  5. #5
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    La méthode "readObject" de la classe "FileInputStream" renvoyant un Object (et non une ArrayList) il faut la caster.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    B = (ArrayList) o.readObject();

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    pour sérialiser il me semble que ta classe doit implémenter java.io.Serializable (suffit d'ajouter implements java.io.serializable dans le cas présent)

  7. #7
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Par défaut
    quand une classe doit etre ecrite oui ... quand elle se contente de lire ou d'ecrire d'autre type de donnee par forcement

    genre si je fais new ObjectOutputStream(new FileOutputStream("out.ser").write(instancedemaclasse); et que instancedemaclasse n'implements pas Serializable a l'execution ca va faire drole lol



    EDIT pour ulysse :

    heu tu veux lire des float ou tu veux serialiser un arraylist ...?
    car bon a lire un float dans un fichier j'utiliserais Scanner qui est moins penible a utiliser

  8. #8
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    salut
    j'ai ajouté cette ligne
    B = (ArrayList) o.readObject();

    message d'erreru
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "C.java": unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown at line 18, column 19
    vous avez une idée

  9. #9
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Par défaut
    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
    	try {
    				ObjectInputStream in = new ObjectInputStream(this
    						.getInputStream());
    				Message re = (Message) in.readObject();
    				if (re.getMessageType() == MessageType.IDENTIFICATION)
    					um.identMessage(this, re);
    				else
    					um.messageReceived(re);
    			}
    		} catch (IOException e) {
    			System.err.println("instance n��" + inst + " : Connection ferm��e");
    			um.closeConnection(this.getPseudo());
    			// e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			System.err.println("instance n��" + inst + " :\n");
    			e.printStackTrace();
    		}
    	}
    morceaux d'un de mes codes

    si tu n'a pas compris reporte toi sur les exception

    pour ecrire ce que je receptionne ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	public void sendObj(Object Mess) {
    		lock.lock();
    		try {
    			ObjectOutputStream out = new ObjectOutputStream(getOutputStream());
    			out.writeObject(Mess);
    			out.flush();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			lock.unlock();
    		}
    	}

  10. #10
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    Citation Envoyé par ulysse031 Voir le message
    salut
    j'ai ajouté cette ligne
    B = (ArrayList) o.readObject();

    message d'erreru
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "C.java": unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown at line 18, column 19
    vous avez une idée
    cela signifie qu'il manque un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    catch (ClassNotFoundException ex) {
      ex.printStackTrace();
    }
    dans la méthode de lecture du fichier serialisé

  11. #11
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Par défaut
    sans oublier evidemment le

  12. #12
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    merci c'est fais

  13. #13
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Par défaut
    mais ca fonctionne avec une arraylist...

    la preuve je serialize une classe avec ca comme champ de classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private Vector<Element>				element				= new Vector<Element>();
     
    	private ArrayList<ArrayList>		vect;
    et si tu regarde la source de arrayList tu vois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public class ArrayList<E> extends AbstractList<E>
            implements List<E>, RandomAccess, Cloneable, java.io.Serializable
    or le java.io.Serializable implemente signifie que ta classe peut etre Serialise

    donc en gros nous comprenons pas ton probleme malgre toute la bonne volonte que l'on y met

  14. #14
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    merci encore mais c'est quoi scaneur au lieu de sérialiser

  15. #15
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Par défaut
    attend je suis en traind e te faire un code d'exemple pour te montrer comment ca marche la serialization de ArrayList

  16. #16
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
        /**
         * @param args
         */
        public static void main(String[] args) {
            ArrayList liste = new ArrayList();
            liste.add("test");
            liste.add("serialisation");
            System.out.println("Serialisation de la liste : "+liste);
            serialise(liste);
            ArrayList listeRetour = deserialise();
            System.out.println("Deserialisation => "+listeRetour);
     
        }
     
        public static void serialise(ArrayList liste) {
            try {
                FileOutputStream fos = new FileOutputStream(
                        "c:\\testSerialisation.txt");
                ObjectOutputStream oos = new ObjectOutputStream(fos);
                oos.writeObject(liste);
                oos.flush();
                oos.close();
            }
            catch (FileNotFoundException e) {
                //Au cas ou on ne trouve pas le fichier
                e.printStackTrace();
            }
            catch (IOException e) {
                //Au cas ou on n'arrive pas à écrire dans le fichier
                e.printStackTrace();
            }
        }
     
        public static ArrayList deserialise() {
            ArrayList liste = null;
            try {
                FileInputStream f = new FileInputStream("c:\\testSerialisation.txt");
                ObjectInputStream o = new ObjectInputStream(f);
                liste = (ArrayList) o.readObject();
                o.close();
            }
            catch (FileNotFoundException e) {
                //Au cas ou on ne trouve pas le fichier
                e.printStackTrace();
            }
            catch (IOException e) {
                //Au cas ou on n'arrive pas à lire le fichier
                e.printStackTrace();
            }
            catch (ClassNotFoundException e) {
                //Au cas ou on ne trouve pas de classe correspondant au contenu du fichier
                e.printStackTrace();
            }
            return liste;
        }

  17. #17
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Par défaut
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.util.ArrayList;
     
    public class test {
     
    	public static void main(String[] args) {
    		new test();
    	}
     
    	public test() {
     
    		ArrayList<String> ecris = new ArrayList<String>();
    		ecris.add("c");
    		ecris.add("tro");
    		ecris.add("simple");
    		try {
    			ObjectOutputStream out;
     
    			out = new ObjectOutputStream(new FileOutputStream("out.out"));
     
    			out.writeObject(ecris);
    			out.flush();
    			out.close();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		System.out
    				.println("le fichier out.out a ete ecris et contient le arrayList 'ecris' avec comme contenu :");
    		for (String s : ecris)
    			System.out.println(s);
    		System.out.println("nous allons maitnenant le relire");
     
    		try {
    			ObjectInputStream in = new ObjectInputStream(new FileInputStream("out.out"));
    			ArrayList<String> lu = (ArrayList<String>)in.readObject();
    			in.close();
    			System.out.println("ArrayList lu = " );
    			for(String s : lu)
    				System.out.println(s);
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
     
     
    	}
    }

    je voulais pas l'avoir fait pour rien lol

  18. #18
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    merci

  19. #19
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Par défaut
    résolu... ^^

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/09/2011, 16h16
  2. Comment faire ArrayList<String> = String[] ?
    Par Sylk dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 05/06/2008, 20h41
  3. Réponses: 9
    Dernier message: 28/05/2008, 02h06
  4. Réponses: 12
    Dernier message: 19/12/2005, 18h12
  5. [C#] Comment créer un byte[] d'un ArrayList ?
    Par Royd938 dans le forum C#
    Réponses: 5
    Dernier message: 26/09/2005, 16h20

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