2014-01-23 7 views
0

Я пытаюсь сериализовать ArrayList, но когда я десериализую, я возвращаю все возвращаемые значения. Не могу понять, почемуСериализация ArrayList в Java

public ArrayList<Uurwerken> maakUurwerk() { 
    lijst.add(new PolsAnaloog(time, "roze", false, "PA01")); 
    lijst.add(new PolsDigitaalTimer(time, "zwart", true, "PDT01")); 
    lijst.add(new PolsAnaloog(time, "rood", false, "PA02")); 
    lijst.add(new PolsAnaloogDatum(time, "zwart", true, "PAD01")); 
     lijst.add(new PolsDigitaalDatumTimer(time, "groen", true, "PADT01")); 
    lijst.add(new Wandklok(time, 10, 20, "geel", "Wand01")); 
    lijst.add(new Wandklok(time, 50, 30, "wit", "Wand02")); 
    lijst.add(new Wandklok(time, 5, 15, "blauw", "Wand03")); 
    lijst.add(new Wandklok(time, 60, 60, "bruin", "Wand04")); 
    lijst.add(new Wandklok(time, 80, 100, "wit", "Wand05")); 
    return lijst;} 

Для выполнения сериализации я следующий код:

public SerialOutput() { 
    // TODO Auto-generated constructor stub 
} 

public void schrijfLijstWeg(ArrayList<Uurwerken> klok) { 
    FileOutputStream bestand = null; 
    ObjectOutputStream out = null; 
    try { 
     bestand = new FileOutputStream(Dir.PAD_Serial); 
     out = new ObjectOutputStream(bestand); 
     out.writeObject(klok); 
    } catch (IOException ex) { 
     System.out.println("Er is iets verkeerds gelopen bij het wegschrijven"); 
     System.out.println(ex.getMessage()); 
    } 
    finally { 
     try { 
      out.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

public ArrayList<Uurwerken> leesLijst() { 
    FileInputStream bestand = null; 
    ObjectInputStream in = null; 
    ArrayList<Uurwerken> klokLijst = new ArrayList<Uurwerken>(); 
    try { 
     bestand = new FileInputStream(Dir.PAD_Serial); 
     in = new ObjectInputStream(bestand); 
     klokLijst = (ArrayList<Uurwerken>) in.readObject(); 
    } 
    catch (Exception ex) { 
     System.out.println("Er is iets verkeerd gelopen met het inlezen"); 
     System.out.println(ex.getMessage()); 
     ex.printStackTrace(); 
    } 
    finally { 
     try { 
      in.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return klokLijst; 
} 

public void toonUurwerk(ArrayList<Uurwerken> uurwerk) { 
    Iterator<Uurwerken> it = uurwerk.iterator(); 
    while (it.hasNext()) { 
     System.out.println(it.next()); 
    } 
} 

Main содержит следующий код

public static void main(String[]args){ 
Fabriek f = new Fabriek(); 
Serializatie so = new Serializatie(); 
    ArrayList <Uurwerken> list = new ArrayList<Uurwerken>(); 
    list.addAll(f.maakUurwerk()); 
    so.schrijfLijstWeg(list); 
    ArrayList<Uurwerken> temp = so.leesLijst(); 
    so.toonUurwerk(temp); 
} 

Я попытался запустить so.toonUurwerk (список) и то я получаю правильные значения. Поэтому я нажимаю, что он сериализуется нормально; но идет не так в десерилизации. Как и сказано, когда я запускаю so.toonUurwerk, он возвращается со всеми «нулевыми» значениями.

+0

и ваш вопрос ...? – WeMakeSoftware

+0

Что именно происходит после сериализации, не могли бы вы объяснить «запасные адреса» –

+2

p.s. это было бы намного проще, если бы это было не в голландском –

ответ

0

Я уверен, что ваша проблема здесь:

list.addAll(f.maakUurwerk()); 

И:

public ArrayList<Uurwerken> maakUurwerk() { 
    lijst.add(new PolsAnaloog(time, "roze", false, "PA01")); 

Как maakUurwerk() не создания в списке она возвращается. Является ли этот список глобальной переменной? Был ли он создан/создан?

Если нет, то этот метод, вероятно, возвращение нуля, что означает, что вы serialising нуля, и именно поэтому он распечатывание нулевой!

+0

Если вы имеете в виду, что поставили статический статический список, да, я имею , Список, а также метод, который я пытался ставить, но без изменений. Список инициализируется в конструкторе Fabriek(). Больше предложений? – boselfje

Смежные вопросы