【发布时间】:2014-01-28 10:29:48
【问题描述】:
我正在构建一个 Java 项目,我需要序列化和反序列化项目的 ArrayList,我不能用 ArrayList 来做,但我必须用 ArrayList 的每个元素来做。不知何故,我设法序列化它,但每当我尝试反序列化它时,我都会得到这个: java.lang.IndexOutOfBoundsException:索引:0,大小:0
代码如下:
File f = new File("testo2.txt");
int i = 0;
ArrayList<DispositivoSelezioneProgrammi> list = new ArrayList<DispositivoSelezioneProgrammi>();
if(f.exists())
{
ObjectInputStream in = new ObjectInputStream(new FileInputStream(f));
while(in.read() != -1)
{
list.add((DispositivoSelezioneProgrammi)in.readObject());
}
}
else
{
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f));
Programma prog1 = new Programma("Lana");
Programma prog2 = new Programma("Seta");
Programma prog3 = new Programma("Rapido");
ArrayList<Programma> lista = new ArrayList<Programma>();
lista.add(0,prog1);
lista.add(1,prog2);
lista.add(2,prog3);
Lavatrice lav1 = new Lavatrice("Asd","lol",lista);
Lavatrice lav2 = new Lavatrice("Fgh","kok",lista);
Lavatrice lav3 = new Lavatrice("Jkl","pop",lista);
Canzone canz1 = new Canzone("Bella");
Canzone canz2 = new Canzone("Brutta");
Canzone canz3 = new Canzone("Qwerty");
ArrayList<Canzone> canz = new ArrayList<Canzone>();
canz.add(0,canz1);
canz.add(1,canz2);
canz.add(2,canz3);
LettoreMP3 lett1 = new LettoreMP3("Lett1");
lett1.load(canz);
LettoreMP3 lett2 = new LettoreMP3("Lett2");
lett2.load(canz);
LettoreMP3 lett3 = new LettoreMP3("Lett3");
lett3.load(canz);
list.add(0,lav1);
list.add(1,lav2);
list.add(2,lav3);
list.add(3,lett1);
list.add(4,lett2);
list.add(5,lett3);
for(DispositivoSelezioneProgrammi disp : list)
{
out.writeObject(disp);
}
out.close();
}
你能帮帮我吗?我不明白会发生什么! 我差点忘了,Lavatrice 和 LettoreMP3 实现了 DispositvoSelezioneProgrammi 接口,这就是为什么我用它作为超类型来序列化它们!
【问题讨论】:
标签: java serialization arraylist