Java ObjectOutputStream и обновление файла - PullRequest
0 голосов
/ 03 декабря 2011

У меня проблемы с выяснением одной проблемы реализации, у меня есть один класс, он ведет себя как список, но вместо того, чтобы держать файл в некоторой коллекции, он сохраняет их на диск.

Проблема возникает, когда я хочу добавить какой-либо элемент в свой список.В начале моего файла у меня есть один int, который сообщает мне, сколько объектов в моем списке, но я не могу найти элегантный способ обновить это значение.У меня есть что-то вроде этого:

   public boolean add(T element)
{
    try 
    {
        out.writeObject(element);
        out.flush();
        //and here we need to update the int in my file
    } catch (IOException e) 
    {
        e.printStackTrace();
    } 
    return true;
}

Я пытался использовать что-то вроде этого:

ObjectOutputStream upd=new ObjectOutputStream(new FileOutputStream(data.getAbsolutePath(),true));

но, как я заметил, он записывает некоторые данные в начало файла, некоторые заголовок сериализацииили что, как я могу обновить одну запись в моем файле или как изменить

ObjectOutputStream

«указатель», чтобы записать в начале файла?

1 Ответ

1 голос
/ 03 декабря 2011

Как правило, для потоковых классов (особенно потоков более высокого порядка, таких как OOS) вы должны перезаписывать весь файл при каждом его обновлении.

Если вы действительно INSIST только при обновлении части файла, то вам следуетПредставьте, что файл состоит из N потоков, где каждый «поток» представляет один объект, который вы пишете.Поэтому я бы использовал RandomAccessFile для базового файла, а затем, когда я хочу написать объект, я обернул бы ObjectOutputStream поверх ByteArrayOutputStream, записал в него свой объект, затем взял эти байты и переписал эти байты в RandomAcessFile, гдевы хотите.

Это, вероятно, не будет особенно эффективным, так как вы напишите N OOS заголовков и N описаний классов для объекта, который вы пишете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...