Я пытаюсь сохранить/загрузить экземпляры моего класса TicketSet в Java. Ниже приведен класс и переменные класса. Класс Ticket и Variable также являются сериализуемыми.
public class TicketSet implements Serializable{
public final int setID;
public int ticketNum;
public Ticket[] tickets;
private static int xCount[];
private static int yCount[];
private static int zCount[];
private Variable x;
private Variable y;
private Variable z;
В другом классе я сохраняю экземпляр класса TicketSet
, который работает нормально. В коде gen — это просто экземпляр класса контроллера, который инициализирует TicketSet
.
TicketSet set;
if (f.exists()) {
FileOutputStream fileOut =new FileOutputStream(f,true);
AppendingObjectOutputStream out = new AppendingObjectOutputStream(fileOut);
set = gen.getTSet();
out.writeObject(set);
out.close();
fileOut.close();
} else {
FileOutputStream fileOut =new FileOutputStream(f,true);
ObjectOutputStream out = new ObjectOutputStream(fileOut);
set = gen.getTSet();
out.writeObject(set);
out.close();
fileOut.close();
}
Чтобы загрузить экземпляры TicketSet, у меня есть следующий код, который выдает ошибку.
ArrayList<Integer> tickid = new ArrayList<Integer>();
tSets = new HashMap<Integer, TicketSet>();
FileInputStream fileStr = null;
ObjectInputStream reader = null;
try {
fileStr = new FileInputStream("TicketSets.ser");
reader = new ObjectInputStream(fileStr);
System.out.println(fileStr.available());
TicketSet tSet= null;
while (fileStr.available()>0) {
Object next = reader.readObject(); //ERROR HERE
if (next instanceof TicketSet) {
tSet = (TicketSet) next;
System.out.println("ID: "+tSet.setID);
tSets.put(tSet.setID, tSet);
tickid.add(tSet.setID);
} else {
System.out.println("Unexpected object type: " + next.getClass().getName());
}
}
//System.out.println("Size: "+tSets.size());
reader.close();
fileStr.close();
}
catch(IOException i) {
i.printStackTrace();
}
catch (ClassNotFoundException c) {
System.out.println("TicketSet class not found");
c.printStackTrace();
}
Выдается ошибка:
ID: 7325825
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.io.ObjectStreamClass
Итак, что я понимаю:
- Первый TicketSet загружается нормально... с ID=73225825
- Затем он пытается загрузить целое число из файла, а не объект TicketSet.
Почему он пытается загрузить целое число? Есть ли способ пропустить чтение чего-либо, кроме объектов? Должен ли я попробовать альтернативный подход?
available
— это, скорее всего, не будет делать то, что вы ожидаете. - person Fildor   schedule 10.02.2014