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 :

[FileInputStream] readObject


Sujet :

Entrée/Sortie Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 38
    Par défaut [FileInputStream] readObject
    Bonjour,

    j'aimerai savoir la commande readObject creer une instance?
    ou alors il faut créer d'abord une instance de l'objet et ensuite faire un readObject?


    merci

  2. #2
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    bonjour,

    Je ne comprends pas bien ta question.

    Si tu veux récupérer un objet qui à été enregistré avec la méthode
    writeObject, il faut utiliser la méthode readObject de la classe ObjectInputStream. Par contre, pour enregistrer un objet, il faut qu'il implémente l'interface Serializable.

    Précise ta question si j'ai répondu à côté.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 38
    Par défaut
    ca je suis ok.

    voici ce que je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Essai d = new Essai(200.5, 1,"anticonstitutionnellement");
     
    for (int i = 0 ; i < 10000; i++)  
    {                  
       fich.writeObject(d);
      et j'incremente le int de d
    }
    pour récuperer je fais ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Essai coco;
     
    for (int i = 0 ; i < 10000; i++)                   
     coco = (Essai)fich2.readObject();
    mon probléme c'est lorsque je récupère , je récupère toujours la même chose et même si j'aggrandie ma boucle, il ne fait même d'erreur

    qu'est ce que je fais ou pas qui soit pas bien?

  4. #4
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    re,

    Bon, j'ai fais des tests, et j'obtiens pareil que toi, il ne change pas mon int !!!

    Par contre, quand j'agrandie ma boucle, il me fait bien une erreur

    EOFException, ce qui indique qu'il inscrit plusieurs objets et qu'il en lit plusieurs (c'est déjà ça). Reste à savoir pourquoi il ne veut pas changer ce int.

  5. #5
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    Bon,

    il fait la même connerie avec les Integer.

    Il faut recréer un objet à chaque fois.
    ce code fonctionne :

    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
     
    public class TestSerial implements Serializable{
     
    	public static void main(String[] args) {
    		TestSerial ts = new TestSerial();
    	}
     
    	public TestSerial() {
    		try {
    			// écriture 
    			ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("test.ser"));
    			Serial d = new Serial(3);
    			for(int i=0; i<1000; i++) {
    				oos.writeObject(d);
    				d = new Serial(d.getD()+1);
    			}
    			oos.close();
     
    			// lecture
    			ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.ser"));
    			for (int i=0; i<1000; i++) {
    				Serial f = (Serial)ois.readObject();
    				System.out.println(f.getD());
                                			}
                   ois.close();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    	}
     
    	public class Serial implements Serializable {
     
    		private Integer d;
     
    		public Serial(int d) {
    			this.d = new Integer(d); 
    		}
     
    		public void setD(int d) {
    			this.d = new Integer(d);
    		}
     
    		public int getD() {
    			return this.d.intValue();
    		}
    	}
    }

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 38
    Par défaut
    merci,


    comment je peux lui remplacer mon for pour un tant que je n'ai pas atteint la fin de mon fichier

    y a-til une méthode? si oui laquelle merci

  7. #7
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    bonjour,

    tu as la méthode availble pour savoir combien d'octets tu peux lire,
    mais pour cela, il faut que tu saches combien d'octets prend ton objet.

    Sinon tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try {
       boucle for
    catch(EOFException e) {
         on est à la fin du fichier
    }
    bon courage

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 38
    Par défaut
    et comment je sais combien d'octet mon objet fait?

  9. #9
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    ben justement, c'est bien ça le problème.

    utilises la deuxième solution.
    A moins que quelqu'un trouve mieux.

    Note :
    tu as peut-être un moyen de savoir combien d'octets ton objet fais. Tu l'écris dans un fichier avec writeObject et après tu regarde combien pèse ton fichier, ça doit être le nombre d'octets de ton objet. Mais cette méthode est nulle.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 38
    Par défaut
    mais ma boucle for jusqu'a ou la faire je ne connait pas le nombre d'enregistrement

  11. #11
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    bien sûr,


    Mais lorsque tu vas essayer de lire un enregistrement alors que tu ais à la fin de ton fichier, la MV va lancer une EOFException. Tu vas donc passer dans ton catch. A partir de là, tu sais que tu as lu tous les enregistrements.

    j'espère que tu m'as compris.

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

Discussions similaires

  1. StreamCorruptedException lors d'un readObject
    Par Janitrix dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 10/01/2007, 19h24
  2. [Question de débutant] byte[] et FileInputStream
    Par Faiche dans le forum Langage
    Réponses: 1
    Dernier message: 31/10/2006, 15h55
  3. Réponses: 7
    Dernier message: 02/09/2006, 17h49
  4. [conseil][FileInputStream][constructeur] Différences ?
    Par FFF dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 27/10/2005, 16h22
  5. [Serialisation][readObject] l'arbre de parcours
    Par divxdede dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 12/10/2004, 10h54

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