多个类可以在Java中序列化同一个对象吗?

时间:2010-08-31 21:45:04

标签: java serialization synchronization arraylist

我在两个类中序列化一个ArrayList:

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 个答案:

答案 0 :(得分:2)

根据你的描述,不。

序列化对象基本上只是将其快照写入流中,以便将其保存到磁盘或传输到其他地方并进行读取。没有涉及的数据同步。更改您已反序列化的对象将不会影响它最初序列化的对象...没有任何链接。简单地将对象序列化为共享文件也不会导致任何类型的同步,因为使用该文件的任何内容都不会自动读取文件并在写入文件时同步其状态,而无需添加代码来近似该效果自己。