Десериализация файла для удаления объекта и повторное выполнение сериализации

#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-строчного файла.