2014-12-22 33 views
0

我使用LibGdx编码游戏。我创建了一个关卡编辑器,您可以在关卡中放置对象。所有对象都放入一个列表中,然后通过将列表写出到对象输出流中来将整个列表序列化。然后我读入游戏中的对象列表,并将列表复制到当前正在播放的对象列表中。在玩游戏的实际用户设备上,将会有20多个序列化的关卡文件。他们现在只会被反序列化。这是关于内存和性能的有效方法吗?这些文件能占用大量内存吗?我注意到人们使用xml或Json来处理我正在做的事情。我是否应该像担任我的级别加载一样担心有任何问题?谢谢。如果我的问题不清楚,请告诉我。Java序列化内存效率

+0

为什么文件会占用任何内存?他们是文件。 – EJP

+0

不要担心性能问题,直到您确实发现某个特定问题。使用文本格式使软件的两端调试变得更加简单,阅读或编写JSON和XML通常不是主要的开销来源。 – chrylis

回答

1

当我们在寻找代码变慢的时候,我们对它进行了描述,发现它花费了大量的时间在一件事上。当我们看到它变成了一个部分,一个对象被串行化成一个字符串并被重复复制。出于某种原因,序列化的默认java实现是SLOW。

序列化的另一个问题是它是黑盒子 - 如果你的文件被破坏或者在升级过程中你的对象已经搞乱了,你可能会失去一切。

您是否考虑过ORM和某种简单的数据库?有数据库被编译到您的代码中(您的用户看不到),它几乎就是db.save(anyObject)...非常易于使用。

0

对于一个类似的问题我做了一个简短的研究(因为我不能相信对象序列化速度很慢),我建议你使用JSON,因为它更快。根据RAM的内存使用情况将相同(只要对象被反序列化)。在磁盘上,您可能需要压缩它。

根据这些基准,杰克逊比Java序列化速度快: benchmark deeplink

另一个优点是您的JSON文件的可读性。

+0

您引用的基准不提供任何方法或代码,因此无法判断其价值。 – EJP

+0

哦,它的确如此,我只是把它连接得太深了。 https://github.com/RichardHightower/json-parsers-benchmark – wgitscht

+0

谢谢,我会研究一下。 –