我曾经使用Serializable对象将它们保存在filesytem中并读取它们以便做任何我想做的事情。但是当你必须在活动之间传递数据时,序列化很慢,所以我读过它而不是它推荐使用Parcelable。然后我做了,是的,它更快!但现在,我有一点问题。由于Parcelable针对IPC进行了优化,因此它们不可序列化,无法保存到文件中。所以我想知道是否可以这样做。
此外,如果我决定为我的类实现Parcelable和Serializable接口,但只使用Parcelable在我的活动之间传递数据,我将能够将类保存到文件中。但我想,因为我使用serializable(只是为了保存,而不是传递数据),这不是一个好主意哼哼?
我也想过使用Gson库,从类中序列化数据,并将JSON保存到文件中,并重用Gson反序列化JSON以获取我的Parcelable对象。这似乎是个好主意吗?性能怎么样?
感谢所有人的回答!
学家
答案 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。