Я пишу небольшую программу на Java (это плагин ImageJ, но проблема не связана именно с ImageJ), и у меня есть некоторые проблемы, скорее всего из-за того, что я никогда не программировал на Java до ...Чтение сериализованного объекта из файла
Итак, у меня есть вектор векторов, и я пытаюсь сохранить его в файле и прочитать его.
переменная определяется как:
Vector <Vector <myROI> > ROIs = new Vector <Vector <myROI> >();
, где myROI
это класс, который я определено ранее.
Теперь, чтобы записать вектор в файл я использую:
void saveROIs()
{
SaveDialog save = new SaveDialog("Save ROIs...", imp.getTitle(), ".xroi");
String name = save.getFileName();
if (name == null)
return;
String dir = save.getDirectory();
try
{
FileOutputStream fos = new FileOutputStream(dir+name);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(ROIs);
oos.close();
}
catch (Exception e)
{
IJ.log(e.toString());
}
}
Это правильно генерирует двоичный файл, содержащий (я полагаю) объект ROIs
.
Теперь я использую очень похожий код для чтения файла:
void loadROIs()
{
OpenDialog open = new OpenDialog("Load ROIs...", imp.getTitle(), ".xroi");
String name = open.getFileName();
if (name == null)
return;
String dir = open.getDirectory();
try
{
FileInputStream fin = new FileInputStream(dir+name);
ObjectInputStream ois = new ObjectInputStream(fin);
ROIs = (Vector <Vector <myROI> >) ois.readObject(); // This gives error
ois.close();
}
catch (Exception e)
{
IJ.log(e.toString());
}
}
Но эта функция не работает.
Во-первых, я получаю предупреждение:
warning: [unchecked] unchecked cast found : java.lang.Object
required: java.util.Vector<java.util.Vector<myROI>>
ROIs = (Vector <Vector <myROI> >) ois.readObject();
^
Я гугле за что и посмотреть, что я могу подавить предваряя @SuppressWarnings("unchecked")
, но это только делает вещи хуже всего, как я получаю сообщение об ошибке:
<identifier> expected
ROIs = (Vector <Vector <myROI> >) ois.readObject();
^
В любом случае, если я опускаю @SuppressWarnings
и игнорировать предупреждение, объект не читается и исключение
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: myROI
Снова Google сообщает мне, что myROI
нуждается в implements Serializable
. Я попробовал просто добавить implements Serializable
к определению класса, но этого недостаточно. Может ли кто-нибудь дать мне несколько советов о том, как действовать в этом случае? Кроме того, как избавиться от предупреждения о методе?
Что происходит после того, как вы добавили 'Serializable'? Вы перекомпилировали? – Bozho
«этого недостаточно» - у вас все еще есть одно и то же исключение после того, как myROI реализует Serializable? BTW - соглашение об именовании! Названия классов начинаются с буквы верхнего регистра, переменные с нижним регистром (здесь: MyROI и rOI). Значительно увеличивает блаженство! –
Да, я перекомпилировал, сохранил файл и попытался перезагрузить его, но я получаю ту же ошибку – nico