Sérialisation
Fermé
fixoudb
Messages postés
2
Date d'inscription
mardi 20 février 2018
Statut
Membre
Dernière intervention
21 février 2018
-
Modifié le 20 févr. 2018 à 20:03
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 - 23 févr. 2018 à 13:45
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 - 23 févr. 2018 à 13:45
1 réponse
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 005
20 févr. 2018 à 20:21
20 févr. 2018 à 20:21
Bonjour,
Cette écriture est maladroite et potentiellement fausse :
Imaginons que l'on prenne deux objets différents :
Soit tu utilises la notation objet avec
Idem pour
En réalité ni l'un ni l'autre, ce que tu désérialises c'est l'objet qu'il y a dans le fichier, et c'est ce fichier qu'il faudrait mettre en paramètre.
Notamment quand tu fais
Remarque : en Java les méthodes et les noms de variables commencent par une minuscule.
Cette écriture est maladroite et potentiellement fausse :
me.Ser(me);
Imaginons que l'on prenne deux objets différents :
a.Ser(b);lequel tu veux sérialiser a, ou b ?
Soit tu utilises la notation objet avec
me.Ser();pour sérialiser
this, soit tu fais des méthodes static et tu sérialises l'argument :
Personne.Ser(me);...
Idem pour
me.Deser(me);, ça n'a pas de sens, avec
a.Deser(b);qu'est-ce que tu désérialises, a, b ?
En réalité ni l'un ni l'autre, ce que tu désérialises c'est l'objet qu'il y a dans le fichier, et c'est ce fichier qu'il faudrait mettre en paramètre.
Notamment quand tu fais
P = (Personne) ois.readObject();c'est faux, modifier la référence du paramètre ne va pas modifier l'objet qui correspond (et ça c'est toujours vrai, ce n'est pas spécifique à la sérialisation)
Remarque : en Java les méthodes et les noms de variables commencent par une minuscule.
21 févr. 2018 à 16:38
Tout d'abord merci de vote réponse.
Effectivement les écritures des méthodes Ser et Deser ne sont pas cohérentes au niveau des arguments, seulement j'avais besoin d'une Personne P dans mes fonctions et étant débutant en java je ne sais pas comment faire autrement..
Auriez vous à votre connaissance des méthodes de sérialisation et de déserialisation qui conviendraient dans un cas comme celui-ci ?
L'idée serait de pouvoir ré-obtenir les attributs de mes personnages à chaque réouverture de Netbeans par exemple..
Merci d'avance !
21 févr. 2018 à 18:55
public static void serialize(File file, Serializable object) throws IOException { try (FileOutputStream fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos)) { oos.writeObject(object); } } public static Serializable deserialize(File file) throws IOException { try (FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis)) { return (Serializable) ois.readObject(); } catch (ClassNotFoundException e) { e.printStackTrace(); return null; } }Exemple :
public static void main(String[] args) throws IOException { File file = new File("C:/personne.ser"); Personne p1 = new Personne(45, "Jules"); serialize(file, p1); Personne p2 = (Personne) deserialize(file); }23 févr. 2018 à 12:32
Il y a juste un problème, l'ordinateur ne connaît pas la classe File... est-ce à moi de la construire ?
23 févr. 2018 à 13:45