Могут ли несколько классов сериализовать один и тот же объект в Java? - PullRequest
0 голосов
/ 01 сентября 2010

Я сериализирую ArrayList в 2 классах:

private void serializeQuotes(){
        FileOutputStream fos;
        try {
            fos = openFileOutput(Constants.FILENAME, Context.MODE_PRIVATE);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(quotesCopy); 
            oos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }
    }

    @SuppressWarnings("unchecked")
    private void deserializeQuotes(){
        try{
            FileInputStream fis = openFileInput(Constants.FILENAME);
            ObjectInputStream ois = new ObjectInputStream(fis);
            quotesCopy = (ArrayList<Quote>) ois.readObject();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
    }

Предположим, что:

1. Class A serializes Quotes
2. Class B deserializes Quotes
3. Class B adds stuff to Quotes
4. Class B serializes Quotes

Могу ли я с уверенностью предположить, что цитаты будут обновлены и синхронизируются между двумя классами?

1 Ответ

2 голосов
/ 01 сентября 2010

Из того, что вы описали, нет.

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

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