Java ClassCastException при использовании FileInputStream

Я пытаюсь сохранить/загрузить экземпляры моего класса 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.

Почему он пытается загрузить целое число? Есть ли способ пропустить чтение чего-либо, кроме объектов? Должен ли я попробовать альтернативный подход?


person tiraths27    schedule 10.02.2014    source источник
comment
По-видимому, ваш входной поток не является допустимым сериализованным объектом.   -  person Hot Licks    schedule 10.02.2014
comment
У вас есть более 1 объекта в этом файле? Попробуйте использовать что-то отличное от available — это, скорее всего, не будет делать то, что вы ожидаете.   -  person Fildor    schedule 10.02.2014
comment
Может быть, добавить jboss в свои теги? docs.jboss.org/ jbossas/javadoc/4.0.3SP1/common/org/jboss/util/   -  person Leo    schedule 10.02.2014
comment
или ваш AppendingObjectOutputStream - это хак? stackoverflow.com/questions/1194656/   -  person Leo    schedule 10.02.2014
comment
@Fildor Да, мне нужно, чтобы он работал с несколькими объектами.   -  person tiraths27    schedule 10.02.2014
comment
@ Лео, да, я использую этот хак   -  person tiraths27    schedule 10.02.2014
comment
@ tiraths27, вы видели предупреждения о других ответах?   -  person Leo    schedule 10.02.2014
comment
@Лео Спасибо. У меня был другой взгляд, и я решил его: stackoverflow.com/questions/12279245/   -  person tiraths27    schedule 10.02.2014
comment
хорошо. тогда, пожалуйста, добавьте свой собственный ответ на этот вопрос и примите его, чтобы все знали, что он решен :-)   -  person Leo    schedule 10.02.2014


Ответы (1)


Мне не хватало Reset() в моем AppendingObjectOutputStream.

ClassCastException при добавлении объекта OutputStream

person tiraths27    schedule 11.02.2014