Nel mio codice ho una classe Database che contiene 2 arraylist di oggetti motore e componenti.
Quando creo un oggetto di tipo Database e lo serializzano su un file, al momento deserializzazione Le arraylist sono vuote (Se inserirsi altri attributi questi verrebbero deserializzati correttamente). Se invece provo a serializzare Un arraylist Al momento della deserializzazione Questa contiene effettivamente gli oggetti aggiunti.
In entrambi i casi le arraylist vengono correttamente riempite, infatti si approva stampare un elenco degli oggetti contenuti questo ritorna esattamente questi ultimi.
Vi scrivo un po' di codice
codice:
public class Database implements Serializable {
private static final long serialVersionUID = 1L;
static final String nomefile = "save.s";
static String S = "stringa prova";
static ArrayList<Motore> motori=new ArrayList <Motore>();
static ArrayList<Componente> componenti= new ArrayList<Componente> ();
public void save() {
FileOutputStream fos=null;
ObjectOutputStream oos=null;
try {
fos = new FileOutputStream(nomefile);
oos = new ObjectOutputStream(fos);
oos.writeObject(this);
System.out.println("database correttamente salvato.");
} catch (IOException e) {
e.printStackTrace();
}
finally
{
try{
if (oos != null)
oos.flush();
oos.close();
if (fos != null)
fos.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
public static Database load() throws IOException {
FileInputStream fis = null;
ObjectInputStream ois = null;
Database db = null;
try {
fis = new FileInputStream(nomefile);
ois = new ObjectInputStream(fis);
db = (Database) ois.readObject();
return db;
} catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
}
finally
{
if (ois != null)
ois.close();
if (fis != null)
fis.close();
}
return db;
}
}
Due classi distinte Componente e Motore Praticamente uguali (per farvi capire, in realtà sono diverse)
codice:
public class Componente/Motore implements Serializable {
private String nome;
public Componente/Motore(String nomef){
this.nome = nome;
Database.componenti/motori.add(this);
}
}
codice:
public class Test{
private static Database database ;
Motore M1 = new Motore("motore1");
Motore M2 = new Motore("motore2");
Componente C1 = new Componente("componente1");
Componente C2 = new Componente("componente2");
Componente C3 = new Componente("componente3");
Componente C4 = new Componente("componente4");
database.save();
}
Ora, se provo a scrivere
codice:
public class Test{
private static Database database ;
/* Motore M1 = new Motore("motore1");
* Motore M2 = new Motore("motore2");
* Componente C1 = new Componente("componente1");
* Componente C2 = new Componente("componente2");
* Componente C3 = new Componente("componente3");
* Componente C4 = new Componente("componente4");
* database.save();
*/ Database.load();
}
Le arraylist sono vuote ma la String "stringa prova" è stata deserializzata correttamente...
Ci sto sbattendo la testa da una settimana, non capisco proprio...
Spero possiate aiutarmi