【问题标题】:Can multiple classes serialize the same object in Java?多个类可以在Java中序列化同一个对象吗?
【发布时间】:2010-08-31 21:45:03
【问题描述】:

我在 2 个类中序列化一个 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

我可以安全地假设 Quotes 将被更新并在两个类之间同步吗?

【问题讨论】:

  • (注意,您应该使用try-finally 关闭文件流。始终使用资源acquire(); try { use(); } finally { release(); }。)

标签: java serialization synchronization arraylist


【解决方案1】:

根据你的描述,没有。

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

【讨论】:

  • 这不适用于他正在做的事情。他在序列化,反序列化,改变反序列化的对象,并重新序列化它。如果操作不重叠,它应该 100% 工作。
  • @EJP “应该工作”是什么意思?如果他添加了 A 类反序列化文件中的引号的第 5 步,那么在这一系列步骤之后它们应该具有相同的引号。但他没有,所以 A 类和 B 类不会有相同的引号。
猜你喜欢
  • 1970-01-01
  • 2013-07-22
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
  • 2011-02-12
相关资源
最近更新 更多