Добавление нового объекта в существующий файл

Привет у меня есть проблема при попытке добавить новые объекты в существующий файл.. После запуска приложения Android снова, я хочу получить существующий файл и добавить новые объекты, а затем прочитать объекты из существующего файла... На самом деле, когда я пытаюсь прочитать объект, код будет читать только первые объекты.. Вы можете найти под кодом.. Не могли бы вы помочь? Спасибо

используя следующий метод для записи объектов:

 public void saveObject(Person p, File f){
     try
     {

         ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f, true));
         oos.writeObject(p);
         oos.reset();
         oos.flush(); 
         oos.close();


     }
     catch(Exception ex)
     {
        Log.v("Serialization Save Error : ",ex.getMessage());
        ex.printStackTrace();
     }
}

Используя следующий метод для чтения объектов:

    public Object loadSerializedObject(File f)
{

       try {
          ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f));
           try{
              Object loadedObj = null;
              while ((loadedObj = ois.readObject()) != null) {
              Log.w(this.getClass().getName(), "ReadingObjects") ;

            }
              return objects;
           }finally{
               ois.close();
           }

       } catch (StreamCorruptedException e) {
           e.printStackTrace();
       } catch (IOException e) {

           e.printStackTrace();
       } catch (ClassNotFoundException e) {
           e.printStackTrace();
       }
       return null;
}

1 ответ

Решение

К сожалению, вы не можете создать новый ObjectOutputStream каждый раз, когда вы хотите добавить в поток, а затем прочитать все обратно в одном потоке. Конструктор добавляет заголовки в базовый поток, прежде чем вы начнете писать объекты. Вы, вероятно, видите java.io.StreamCorruptedException: invalid type code: AC исключение, это потому, что первый заголовок 0xAC,

Я не знаю, сколько объектов вы имеете дело, но один из вариантов может быть прочитать все ваши объекты, а затем переписать их все с использованием одного ObjectOutputStream, Это может стать дорогостоящим, если есть много объектов. В качестве альтернативы вы можете рассмотреть возможность самостоятельного управления сериализацией через Externalizable. Это может стать болезненным, хотя.

Другие вопросы по тегам