【问题标题】:Serializing objects referenced in my arraylist into one file, and then loading them back into that arraylist将我的arraylist中引用的对象序列化到一个文件中,然后将它们加载回该arraylist
【发布时间】:2015-02-23 21:51:41
【问题描述】:

我知道类似的问题已经被问过很多次,但我没有找到一个实际上相同的问题 - 如果我错过了一个问题,我们深表歉意。

我正在尝试制作一个小游戏。游戏将我的角色(精神)存储到一个数组列表中。通过创建我的 Spirit 类的不同实例来创建具有不同特征的精神。然后我将该实例存储到包含我的聚会的数组列表中。 arraylist 包含 3 个元素。

我想序列化这些实例的所有字段,将它们保存到文件中,然后再次加载它们并将它们存储回数组列表中的正确位置(本质上是在我的游戏中保存/加载)。

有人建议我使用 kyro 进行序列化,所以我正在使用它。不过我很确定代码非常相似,我不得不想象解决这个问题的方式基本相同。

这是我现在的代码

public void usekryo(){

            Kryo kryo = new Kryo();
            kryo.register(Spirits.class);
            Spirits writespirit;
            Spirits readspirit;

            for(int i=0;i<3;i++) { try (Output output = new Output(new FileOutputStream("spirits.ser"))) {
            System.out.println("loop is going");
            writespirit = OwnedSpirits.myspirits.get(i);   
            kryo.writeClassAndObject(output, writespirit);
            } catch (FileNotFoundException ex) { System.out.println("fail"); } }

            Spirits blankarray = new Spirits();
            OwnedSpirits.myspirits.set(0, blankarray);
            OwnedSpirits.myspirits.set(1, blankarray);
            OwnedSpirits.myspirits.set(2, blankarray);

            System.out.println(OwnedSpirits.myspirits.get(2).species);

            for(int i=0;i<3;i++) { try (Input input = new Input(new FileInputStream("spirits.ser"))) {
            System.out.println("now it's loading");
            readspirit = (Spirits) kryo.readClassAndObject(input);
            OwnedSpirits.myspirits.set(i, readspirit);

            } catch (FileNotFoundException ex) { System.out.println("fail"); } }

            System.out.println(OwnedSpirits.myspirits.get(0).species);
            System.out.println(OwnedSpirits.myspirits.get(2).species);





    }

这最终完全符合我的预期。我的意思是我知道这不能解决我的问题,但我只是确保我正确使用了 kyro。

无论如何,它创建了我的精神类的一个实例,将值加载到我的数组列表的第一个索引中,然后序列化这个新实例。到现在为止还挺好。

但它又做了一次,并覆盖了我第一次写的内容。然后做第三次。因此,实际保存的唯一值是我的数组列表的索引 [2] 中的值。

然后,当我读回该文件并再次写入时,我的数组列表的所有 3 个索引都填充了最初只是我的数组列表的索引 [2]。

那么我到底要怎么写才能让所有 3 个索引都输出到一个文件中,然后再输入到正确的索引中呢?

我希望这不是超级复杂,但我确实很担心。

【问题讨论】:

    标签: java serialization arraylist


    【解决方案1】:

    你让它变得比它需要的更复杂。您应该能够序列化容器 (OwnedSpirits.myspirits)。

    【讨论】:

    • 我真的可以做到吗?我假设它只会序列化对每个实例的引用,然后如果我关闭程序然后尝试读取该文件,它们将不会引用任何内容。不过我现在就试试。
    • 它有效。哇!我没想到会这么容易。我确实有一个问题,我使用的数组列表是最终的。所以我只是让它不是最终的。如果我需要它是最终的,我想我将不得不将它加载到不同的数组列表中,然后通过某种方法复制它,但现在,这可行!
    猜你喜欢
    • 2016-03-24
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 2017-06-23
    • 2018-02-26
    • 1970-01-01
    • 2014-12-25
    相关资源
    最近更新 更多