2017-07-21 2 views
0

Ich habe ein Problem Serialisierung:Serialisieren Klasse

import java.io.*; 
import java.util.*; 

public class SerializationSjow implements Serializable{ 

    public void serialization(Library library){ 
     try{ 
      FileOutputStream fileOut = new FileOutputStream("Test.ser"); 
      ObjectOutputStream out = new ObjectOutputStream(fileOut); 
      out.writeObject(library); 
      out.close(); 
      fileOut.close(); 
     } catch(Exception i) { 
      System.out.println(i); 
     } 
    } 

    public void deserialization(Library library){ 
     try{ 
      FileInputStream fileIn = new FileInputStream("Test.ser"); 
      ObjectInputStream in = new ObjectInputStream(fileIn); 
      library = (Library) in.readObject(); 
      in.close(); 
      fileIn.close(); 
     } catch(Exception i){ 
      System.out.println(i); 
     } 
    } 

} 

es funktioniert gut, wenn ich in den gleichen Methoden setzen, bevor ich meine mainMenu von meiner Hauptklasse nennen, aber wenn ich sie in eine Klasse setzen und rufen Sie sie aus Meine Hauptmethode wird nicht serialisiert. (zuerst die Dezerialisierung und dann die Serialisierung, nachdem meine MainMenu-Methode beendet ist).

Hauptklasse:

public class Main { 
public static void main(String args[]) { 
    Library library = new Library(); 
    SerializationSjow seri = new SerializationSjow(); 

    seri.deserialization(library); 
    library.loginMenu(); 
    seri.serialization(library); 
} 
} 
+1

Zeigen Sie Ihre Hauptmethode an. Es ist unklar, was Sie tun und welchen Fehler Sie bekommen. – talex

+1

Der Code, den Sie gepostet haben, sieht OK aus, also ist das nicht das Problem. – Jesper

+0

Ich mache genau dasselbe in der Hauptmethode wie dieses, es ist nur, dass ich eine saubere Hauptklasse möchte, also habe ich die serialize in eine Klasse verschoben, und jetzt tut es einfach nicht serialisieren, keine Fehler, nur spart nicht die Arrays, die ich mache. – ITGuru

Antwort

1

Java ist Pass-by-Wert! Das bedeutet, dass Variablen, die an eine Methode übergeben werden, als Werte übergeben werden, und wenn die Variable selbst in der Methode geändert wird, wird dies nicht außerhalb der Methode angezeigt.

Beispiel:

private static void increment(int arg) { 
    arg = arg + 1; 
    System.out.println("incremented: " + arg); 
} 

public static void main(String[] args) { 
    int value = 1; 
    System.out.println("before: " + value); 
    increment(value); 
    System.out.println("after: " + value); 
} 

sollte

before: 1 
incremented: 2 
after: 1 

In main drucken wir, dass der Wert nicht geändert sehen kann, hat ...

Lösung: Ihre deserialization Methode ändern um die Library insa zurückzugeben d der Verwendung eines Parameters:

public Library deserialization() { // no parameter 
    Library library; 
    : 
    library = ... 
    : 
    return library; // null on error? or better throw an Exception 
} 

Obs: dort für SerializationSjow keine Notwendigkeit Serializable zu implementieren ist - es ist nicht zu werden serialisiert wird, ist es Library, die sie umsetzen müssen.

+0

Ah macht Sinn! Ich danke dir sehr. Wirklich explizit, genau was ich brauchte :) – ITGuru

Verwandte Themen