Я пытаюсь написать держатель ключей и хочу записать пароли в файл .dat с помощью ObjectOutputStream, а затем прочитать их с помощью ObjectInputStream. Это мой код для записи объектов:
public void toFile()
{
try
{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("passwords.dat"));
for(int i = 0; i<this.nrOfPW; i++)
{
if(this.PWlist[i] instanceof longPW)
{
oos.writeObject((longPW)this.PWlist[i]);
}
else
{
oos.writeObject((PinPW)this.PWlist[i]);
}
}
oos.close();
}
catch(IOException e)
{
e.getStackTrace();
}
}
Кажется, это работает, но когда я пытаюсь снова прочитать файл и поместить объекты в свой массив PWlist, он говорит, что PinPW не сериализуем, хотя PinPW реализует Serializable и импортируется. Базовый класс PinPW (Info) также реализует Serializable и импортирует его. Это код, в котором я прочитал файл:
public void fromFile()
{
try
{
ObjectInputStream objIn = new ObjectInputStream(new FileInputStream("passwords.dat"));
while(objIn.readObject() != null)
{
if(this.nrOfPW == this.PWlist.length)
{
expand(10);
}
if(objIn.readObject() instanceof PinPW)
{
this.PWlist[this.nrOfPW] = (PinPW)objIn.readObject();
this.nrOfPW++;
}
else
{
this.PWlist[this.nrOfPW] = (longPW)objIn.readObject();
this.nrOfPW++;
}
}
objIn.close();
}
catch(EOFException e)
{
e.getStackTrace();
}
catch(IOException ex)
{
ex.printStackTrace();
}
catch(ClassNotFoundException ex)
{
ex.printStackTrace();
}
}
Массив PWlist является массивом Info, а PinPW и longPW расширяют Info.
Что мне делать, чтобы решить эту проблему?
longPW
класс должен бытьLongPW
. Точно так же переменные именуются с использованием строчных букв StartingCamelCase, поэтому ваша переменнаяPWList
должна называтьсяpwList
. - person Greg Kopff   schedule 08.06.2012writeObject
, поскольку параметр здесь равенObject
. Однако вы должны убедиться, что все переданные объекты реализуют интерфейсjava.io.Serializable
, поскольку он не применяется компилятором (это обеспечивается потоком вывода сериализации). - person Kevin Brock   schedule 08.06.2012