Serializacja struktur

0

Chcę zapisywać pewną strykturę, a właściwie tablicę struktur, i wykorzystywać jako plik projektu w moim programie.
Strukturą tą jest DataContainer

class DataContainer implements Serializable{
    
    private PublicationType type;
    private HashMap<Enum, String> fields;
    private HashMap<Enum, String> oFields;
    private HashMap<String, String> userFields;
    private String name;

    public DataContainer(PublicationType type, HashMap<Enum, String> fields, HashMap<Enum, String> oFields, HashMap<String, String> userFields, String name) {
        this.type = type;
        this.fields = fields;
        this.oFields = oFields;
        this.userFields = userFields;
        this.name = name;
    }

    public PublicationType getType() {
        return type;
    }

    public HashMap<Enum, String> getFields() {
        return fields;
    }

    public HashMap<Enum, String> getoFields() {
        return oFields;
    }

    public HashMap<String, String> getUserFields() {
        return userFields;
    }

    public String getName() {
        return name;
    }
}

chcę zapisywać i odczytywać tablicę tych obiektów i robię to w poniższy sposób:

    public static DataContainer[] loadProject(){
                 //Przygotowanie do wczytania
        
                try {
            in = new ObjectInputStream(new FileInputStream(fileToSave));
            if (in.readObject() instanceof DataContainer[]) {
                DataContainer[] observableList = (DataContainer[]) in.readObject();
                return observableList;
            } else {
                //Obsługa błędnego pliku
            }
            in.close();
            return null;
        } catch (FileNotFoundException e) {
                //Obsługa nie znalezionego pliku
                return null;
        } catch (ClassNotFoundException | IOException e) {
            //obsługa wyjątków
            
        }
    }

    public static void saveProject(DataContainer[] pub){
               //Przygotowanie do wczytania

        try {
            out = new ObjectOutputStream(new FileOutputStream(fileToSave+".btd"));
            out.writeObject(pub);
            out.close();
        } catch (IOException | NullPointerException ex) {
            
        }
    }

Pozbyłem się części kodu bo to wyświetlenie okienek i tym podobne.
Chodzi o to że o ile sam zapis zdaje się działać to wczytywanie wykoleja się na tej lini kodu:

in = new ObjectInputStream(new FileInputStream(fileToSave));

i przeskakuje na koniec metody bez rzucenia jakiegokolwiek wyjątku. Na debugu doczytałem się że to wyjątek JVM ale nie wiem o co chodzi. Nie potrafię stwierdzić czy problemem jest odczytywanie czy sam zapis i szczerze pierwszy raz spotykam się z czymś takim. Może ktoś powiedzieć o co chodzi ?

0
if (in.readObject() instanceof DataContainer[]) {
      DataContainer[] observableList = (DataContainer[]) in.readObject();
      return observableList;
}

Dwukrotnie próbujesz odczytać obiekt z pliku,a po pierwszym czytaniu jesteś na końcu pliku. Na pewno pojawia się EOFException (IOException).
Zmień na

Object ob = in.readObject(); 
if (ob instanceof DataContainer[]) 
{
      DataContainer[] observableList = (DataContainer[]) ob;
      return observableList;
}
0

Dzięki wielkie dosłownie 5 minet się na to nadziałem i weszłam żeby napisać że znalazłem problem a tu proszę mam odpowiedź. Wielkie dzięki za pomoc działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1