#java #serialization #deserialization
#java #сериализация #десериализация
Вопрос:
Я пытаюсь выполнить десериализацию файла «series.dat», чтобы удалить в нем объект. Мой подход заключается в том, чтобы сначала выполнить десериализацию, а затем добавить каждый объект в массив, затем удалить ту позицию массива, которая содержит объект, который я хочу удалить. Затем, когда я снова закончу сериализацию.
Проблема в том, что он считывает только один объект, хотя на самом деле их 3.
public static void EliminarLs(int posicion) throws FileNotFoundException, IOException, ClassNotFoundException{
try{
List<Object> results = new ArrayList<Object>();
FileInputStream fis = new FileInputStream("series.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
try {
while (true) {
results.add(ois.readObject());
}
} catch (OptionalDataException e) {
if (!e.eof)
throw e;
} finally {
System.out.println(results.size());
results.remove(posicion);
ois.close();
}
fis.close();
} catch(IOException ex){
System.out.println(ex);
}
}
```
The error: Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 3, Size: 1
Any idead why? Or a better way to do so.
Thanks in advance!
Ответ №1:
Это не десериализация, но я не собираюсь вдаваться в подробности. То, что вы делаете, это только чтение файла построчно, добавление строк в массив, а затем удаление определенной строки, как показано здесь:
results.remove(posicion);
Ничто не указывает на то, что вы ищете какое-либо конкретное содержимое, оно просто удаляет N-й элемент в массиве на основе того, какой аргумент вы ввели
public static void EliminarLs(int posicion)
Причина, по которой вы получаете ошибку, заключается в том, что вы пытаетесь удалить элемент в позиции за пределами массива, в вашем случае вы пытаетесь удалить 4-ю строку из 1-строчного файла.