Android - 将Parcelable数据保存到文件中

时间:2014-05-08 13:42:06

标签: android gson parcelable serializable

我曾经使用Serializable对象将它们保存在filesytem中并读取它们以便做任何我想做的事情。但是当你必须在活动之间传递数据时,序列化很慢,所以我读过它而不是它推荐使用Parcelable。然后我做了,是的,它更快!但现在,我有一点问题。由于Parcelable针对IPC进行了优化,因此它们不可序列化,无法保存到文件中。所以我想知道是否可以这样做。

此外,如果我决定为我的类实现Parcelable和Serializable接口,但只使用Parcelable在我的活动之间传递数据,我将能够将类保存到文件中。但我想,因为我使用serializable(只是为了保存,而不是传递数据),这不是一个好主意哼哼?

我也想过使用Gson库,从类中序列化数据,并将JSON保存到文件中,并重用Gson反序列化JSON以获取我的Parcelable对象。这似乎是个好主意吗?性能怎么样?

感谢所有人的回答!

学家

3 个答案:

答案 0 :(得分:4)

只需执行context.getFilesDir()并使用java.io.ObjectInputStream和java.io.ObjectOutputStream。

另外,关于" Parcelable现在不能序列化"。从界面中的Parcelable开始,这并不是很有意义,而不是你扩展的类。

所以,

class MyClass implements Parcelable, Serializable {   
}

应该工作得很好。一旦您将对象读写到文件系统,Parcelable接口仍然可以工作。它只是一个界面。

我不得不承认我没有尝试过,但这是我今天所写的内容,明天我将编写单元测试。

希望这有帮助。

答案 1 :(得分:3)

如果您说Parcelable和Serializable接口之间存在冲突,那么这是另一种方法。 (再一次,这没有意义,但我会相信你,直到我明天完成单元测试)...

想一想:

    Parcel p = Parcel.obtain();

    p.writeValue(asset);

    p.setDataPosition(0);

    byte [] b = p.marshall();

    p.recycle();

OOPS,只需阅读marshall()的javaDoc,它就说不要存储到磁盘。它还说,“使用标准序列化存储到磁盘”(释义)。

所以,我的第一个答案应该是为你做的。

答案 2 :(得分:-2)

您是否尝试使用共享偏好设置?如果您需要存储键值。此外,它将是一个XML。