将我的 arraylist 中引用的对象序列化到一个文件中,然后将它们加载回该 arraylist

Serializing objects referenced in my arraylist into one file, and then loading them back into that arraylist

我知道类似的问题已被问过很多次,但我没有找到真正相同的问题 - 如果我错过了一个,请道歉。

我正在尝试做一个小游戏。游戏将我的角色(精神)存储到数组列表中。通过创建我的精神 class 的不同实例,可以创建具有不同特征的精神。然后我将该实例存储到举办我的派对的数组列表中。数组列表包含 3 个元素。

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

有人建议我使用 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。

无论如何,它创建了我的精神实例 class,将值加载到我的 arraylist 的第一个索引中,然后序列化这个新实例。到目前为止,一切都很好。

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

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

那么我到底要怎么写才能将所有 3 个索引输出到一个文件,然后再输入回它们正确的索引?

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

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