[RESOLU] Java: Cast
Dernière réponse : dans Programmation
je cherche a déserialiser un Objet de type "Identifiant" (qui a été correctement serialisé avant), mais quand je cherche a le récupérer, ca me met:
Exception in thread "main" java.lang.ClassCastException
j'ai pourtant bien rajouté "implements Serializable"...
et j'y arrivais tres bien avec un Vector dans un autre contexte...
voici le Cast qui bloque:
(bde de type Identifiant)
Exception in thread "main" java.lang.ClassCastException
j'ai pourtant bien rajouté "implements Serializable"...
et j'y arrivais tres bien avec un Vector dans un autre contexte...
voici le Cast qui bloque:
(bde de type Identifiant)
try{
System.out.println("\n Lecture du fichier\n");
String nomFic = "acces.bde"; // nom du fichier
File f1 = new File(nomFic);
// définition d'un flot en lecture
FileInputStream fis = new FileInputStream(f1);
ObjectInputStream ois = new ObjectInputStream(fis);
// on lit le flot et on récupère dans un Identifiant
bde = (Identifiant)ois.readObject();
ois.close(); // on ferme le flot
Autres pages sur : resolu java cast
Lassé par la pub ? Créez un compte
Es-tu certain qu'avec ce programme, la classe Identifiant est exactement la même que celle que tu as utilisée lors de l'écriture dans le fichier ?
Je m'explique. Les étapes suivantes amenent à ce problème:
1. tu crée ton programme de base
2. tu crée un fichier toto.dat à partir de ce programme
3. tu modifies ta classe Identifiant, par exemple en ajoutant une variable membre
4. tu essaie de lire le fichier avec la classe Identifiant.
Et bien, ici tu as une erreur, car même si la classe porte le même nom et qu'elle est à 99% la même, comme le contenu n'est pas exactement le même, les octets sérialisés ne le sont pas également: le programme ne reconnait plus les données sérialisée.
C'est pour ça que j'insistais sur le dernier cas, mais je n'avais pas donné assez d'explications.
Je m'explique. Les étapes suivantes amenent à ce problème:
1. tu crée ton programme de base
2. tu crée un fichier toto.dat à partir de ce programme
3. tu modifies ta classe Identifiant, par exemple en ajoutant une variable membre
4. tu essaie de lire le fichier avec la classe Identifiant.
Et bien, ici tu as une erreur, car même si la classe porte le même nom et qu'elle est à 99% la même, comme le contenu n'est pas exactement le même, les octets sérialisés ne le sont pas également: le programme ne reconnait plus les données sérialisée.
C'est pour ça que j'insistais sur le dernier cas, mais je n'avais pas donné assez d'explications.
C'est la classe qui sérialise qui est serialisé. Si c'est Identifiant qui doit etre serialisé, c'est elle qui doit implementer l'interface Serializable (je sais plus le nom exact) pas la classe au dessus.
je vois pas trop ta structure, tu as fait ça d'après ce que j'ai compris:
et pareil avec une classe B ?
Dans ce cas tu as 2 classes Identifiant différentes une dasn A et une dans B ?
je vois pas trop ta structure, tu as fait ça d'après ce que j'ai compris:
class A: implements Serializable {
class Identifiant {
...
}
...
}
et pareil avec une classe B ?
Dans ce cas tu as 2 classes Identifiant différentes une dasn A et une dans B ?
Je ne me rappelle plus trop de comment ça marche.
Mais si tu fais une classe simple Identifiant (pas inner).
que tu implemente serialisable, ça devrait marcher. C'est la classe qui se sérialise elle-même.
tu redéfinis la méthode, et tu envois simplement dans ton fichier une instance de Identifiant.
Mais si tu fais une classe simple Identifiant (pas inner).
que tu implemente serialisable, ça devrait marcher. C'est la classe qui se sérialise elle-même.
class Identifiant implements serializable {
...
}
tu redéfinis la méthode, et tu envois simplement dans ton fichier une instance de Identifiant.
et bien pareil.
Je ne me rapelle plus, mais s'il y a une interface du genre Deserialisable (je pensais qu'il n'y en avait qu'une et qu'elle faisait dans les 2 sens), et bien tu l'implémente aussi dans la même classe et tu ne touche pas le code de ton premier post qur tu mets ailleurs dans une autre classe.
Pour la compilation, il faut faire un "import" de ta classe et bien mettre la variable d'environnement CLASSPATH à jour (ou l'indiquer en ligne de commande).
Je ne me rapelle plus, mais s'il y a une interface du genre Deserialisable (je pensais qu'il n'y en avait qu'une et qu'elle faisait dans les 2 sens), et bien tu l'implémente aussi dans la même classe et tu ne touche pas le code de ton premier post qur tu mets ailleurs dans une autre classe.
Pour la compilation, il faut faire un "import" de ta classe et bien mettre la variable d'environnement CLASSPATH à jour (ou l'indiquer en ligne de commande).
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumJava - exception
- solutionsCompiler programme java linux
- ForumProgramme en java sous eclipse interface graphique
- ForumAide pour dessiner en java
- ForumEnvoi email java
- ForumJava lancer un programme depuis java mais.
- ForumCompiler un programme java sous windows
- ForumListe chainée java
- ForumLes listes chainées en java
- ForumProgrammation des port parallele en java
- Voir plus