2015-04-15 1 views
0

Cela aussi en Java. Je n'arrive pas à faire fonctionner cette méthode, la partie sauvegarde fonctionne bien et enregistre l'objet. Mais une fois que j'essaie de lire le fichier, cela ne fonctionne pas et j'obtiens des erreurs ObjectInputStream. Je suis nouveau à l'utilisation de l'interface Serializable et aucune des autres questions semblent m'aider. La sortie attendue est name Joe, weight 153, height 69. Les erreurs sont:Comment lire les fichiers sérialisés?

java.io.InvalidClassException: Personne; classe locale incompatible: flux classdesc serialVersionUID = -1404541419531259795, classe locale serialVersionUID = 3020781085877336930 à java.io.ObjectStreamClass.initNonProxy (Source inconnue) à java.io.ObjectInputStream.readNonProxyDesc (Source inconnue) à java.io.ObjectInputStream. readClassDesc (Source inconnue) à java.io.ObjectInputStream.readOrdinaryObject (Source inconnue) à java.io.ObjectInputStream.readObject0 (Source inconnue) à java.io.ObjectInputStream.readObject (Source inconnue)

public static boolean save(Person p, String filename) { 
     try { 
     ObjectOutputStream os = new ObjectOutputStream(
       new FileOutputStream(filename)); 
     os.writeObject(p); 
     os.close(); 
     return true; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return false; 
} 

    public static Person read(String filename) { 
    try { 
     ObjectInputStream oi = new ObjectInputStream(new FileInputStream(
       filename)); 
     Object o = oi.readObject(); 
     oi.close(); 
     if (o instanceof Person) 
      return (Person) o; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

public static void main(String[] args) { 
    Scanner s = new Scanner(System.in); 
    System.out.println("Do you want to save or load?"); 
    String option = s.next(); 
    Person p = new Person("Joe", 154, 69); 
    if (option.equals("save")) { 
     if (save(p, "newfile")) { 
      System.out.println("Saved."); 
     } 
    } 
    if (option.equals("load")) { 
     Person p1 = read("newfile"); 
     if ((p1 != null)) { 
      System.out.println(p1.getInfo()); 
     } 
    } 

} 

}

+0

Quelle langue utilisez-vous? Je suppose Java? – Daved

+0

Ouais, c'est java – Krysiak

+0

Vous devriez le marquer Java et le mentionner dans votre post. Il obtiendra une meilleure traction et attention. – Daved

Répondre

1

Initiez serialVersionUID à la personne classe comme décrit dans What is a serialVersionUID and why should I use it?

il semble que vous avez changé votre classe de personne en quelque sorte, et maintenant vous ne pouvez pas lire la version enregistrée parce que le bytecode a été changé.

+0

ouais parfait merci – Krysiak

+0

pls envisager d'accepter la réponse;) – jdevelop