Java 如何从SER文件加载特定对象

Java 如何从SER文件加载特定对象,java,serialization,Java,Serialization,我正在使用序列化保存我的游戏世界。世界基本上是一个大的阵列列表,包含每个区域地图对象。面积图的数量是固定的,但大小差别很大(每个5-30 mB)。因此,我不希望在运行时将整个世界加载到内存中,只希望将玩家角色所在的特定区域映射加载到内存中 是否可以在不加载整个世界的情况下加载特定区域地图(或者换句话说:在不反序列化整个SER文件的情况下加载特定对象)?同样,我需要保存特定区域地图(当所有字符都离开该区域时)。请注意,区域地图的大小(以数据为单位)可能已发生显著变化,因为玩家可能会将数百个对象从一

我正在使用序列化保存我的游戏世界。世界基本上是一个大的阵列列表,包含每个区域地图对象。面积图的数量是固定的,但大小差别很大(每个5-30 mB)。因此,我不希望在运行时将整个世界加载到内存中,只希望将玩家角色所在的特定区域映射加载到内存中

是否可以在不加载整个世界的情况下加载特定区域地图(或者换句话说:在不反序列化整个SER文件的情况下加载特定对象)?同样,我需要保存特定区域地图(当所有字符都离开该区域时)。请注意,区域地图的大小(以数据为单位)可能已发生显著变化,因为玩家可能会将数百个对象从一个区域移动到另一个区域


这个问题的要点是,我希望避免将每个地图存储在它自己的SER文件中。这将是大量的文件,玩家每次保存都会变得更多。因此,我的目标是将其很好地打包到一个单独的保存文件中。

您可以做的是为每个区域地图创建一个编号系统。然后,将包含这些区域映射的数组存储在可序列化的文件中。卸载serializable以获取数组,并将其存储在某种形式的变量中。然后,您可以使用编号系统选择要使用的地图

因此,为了回答您的问题,我认为这是不可能的,因为序列化的反序列化方式是它逐个遍历所有序列化字段。不能从SER文件中间选择要反序列化的内容


快乐编程:)

我很害怕,从类似的问答判断,我怀疑这是不可能的。谢谢你的建议。事实上我就是这么做的,但后来我意识到每当角色从一个地图移动到另一个地图时,我必须反序列化整个世界(包含我的区域地图数组)。仅仅是我的测试图(一个大的)加载需要1,5秒,所以如果我有50个测试图,加载时间大约是2分钟。这在我的游戏中是不会发生的!:)我想我必须把每个地图都保存在一个单独的SER文件中,看起来是这样的。。。丑陋。@Frepo我终于可以评论了。。。只是说说而已。如果它有效,它就有效:)谁真的在乎它是否丑陋?