Добавление нового объекта в существующий файл
Привет у меня есть проблема при попытке добавить новые объекты в существующий файл.. После запуска приложения 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. Это может стать болезненным, хотя.