Android应用和序列化/反序列化效率?

时间:2015-12-29 21:51:53

标签: java android serialization deserialization

初步搜索并没有提供我预期的结果,谷歌也没有多大帮助。所以这里......

我正在开发一个应用程序,我将对象序列化为文件。由于应用程序的原因,一次只能序列化多个对象(因为通常一次只能创建一个对象)。

然而,反序列化是我有问题的地方。

我想要做的是能够根据ID反序列化特定的对象。

换句话说,让我说我有一个带有以下数据的序列化对象文件:

1,蒙哥马利伯恩斯,男,100岁 2,荷马辛普森,男,38岁 3,Waylon Smithers,男,44岁 4,Krusty the Clown,男,60岁 5,Marge Simpson,女,38岁 ...等等...

让我们说我只想得到第二个对象(例如,为了这个,ID是2)。

根据我已完成的阅读和研究,无法以这种方式获得特定的对象。如果我理解正确,我将不得不将我的整个序列化目标文件(让它称之为data.ser)读入内存(例如,一个数组或反序列化对象列表),然后迭代它直到我找到了什么我正在寻找。这是对的吗?

我这样做没有问题,看起来效率非常低。

虽然我没有预料到我的应用程序的用户有数百或数千个对象,所以这一切都可能无关紧要,我只是想知道我是否正确理解这一点。它主要用于Android的个人使用和自学。

我不反对使用嵌入式数据库。我现在想避开它,只是为了保持应用程序的大小。

我正确理解这一点吗?除了我上面说明的内容之外,我还没有真正看到过检索特定对象的方法。我的理解是,在Java中使用 的方法是迭代对象。

1 个答案:

答案 0 :(得分:1)

  

我正在开发一个应用程序,我将对象序列化为文件。

我将从您的其余问题中假设您指的是Java序列化。 AFAICT,已经淘汰了十多年,我永远不会建议任何人花费超过10秒钟将其视为存储选项。但是,我们当然欢迎您使用它。

  

根据我已经完成的阅读和研究,无法以这种方式获得特定对象。

那是因为你决定将它们全部放在一个文件中。序列化的单位是顶级对象。

当然欢迎您将它们存储在各自的文件中,并使用文件名识别正确的文件,以便在需要时进行反序列化。

或者,欢迎您保持"索引" (例如,HashMap)单独序列化,您可以在其中保留足够的信息来标识表示对象本身的文件。这个想法是你保持"索引"小到足以维持它相对便宜。

  

(例如,ID为2)

因此,让thingy-2.ser包含ID为2的序列化对象,这样就可以反序列化该对象。

  

我这样做没有问题,看起来效率非常低。

你真正的低效率是写作,而不是阅读。如果更改一个对象中的一个字节,则必须写出整个集合。相比之下,阅读便宜。