【问题标题】:Android - Save Parcelable data into a fileAndroid - 将 Parcelable 数据保存到文件中
【发布时间】:2014-06-25 22:45:04
【问题描述】:

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

另外,如果我决定为我的类实现 Parcelable 和 Serializable 接口,但只使用 Parcelable 在我的活动之间传递数据,我将能够将类保存到文件中。但我想,既然我使用可序列化(仅用于保存,不用于传递数据),这不是一个好主意嗯?

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

感谢大家的回答!

J.

【问题讨论】:

    标签: android gson parcelable serializable


    【解决方案1】:

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

    另外,关于“Parcelable not now serializable”。这并不完全有意义,因为 Parcelable 在接口中,而不是您扩展的类中。

    所以,

    class MyClass implements Parcelable, Serializable {   
    }
    

    应该可以正常工作。一旦你读取对象并将对象写入文件系统,Parcelable 接口仍然可以工作。它只是一个界面。

    我不得不承认我没有尝试过,但这是我今天写的,明天我会写单元测试。

    希望这会有所帮助。

    【讨论】:

    • 在意图中使用类时实现两个接口是一个问题,因为调用 putExtra() 现在不明确 - 它不知道您是调用 putExtra(name,parcelable) 还是 putExtra(名称,可序列化)
    • @jhm intent.putExtra(name, (Parcelable) object);
    • James Barwick 非常感谢,您的回答为我节省了很多时间:D
    【解决方案2】:

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

    想一想:

        Parcel p = Parcel.obtain();
    
        p.writeValue(asset);
    
        p.setDataPosition(0);
    
        byte [] b = p.marshall();
    
        p.recycle();
    

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

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

    【讨论】:

      【解决方案3】:

      您是否尝试使用共享首选项?如果您需要存储键值。此外,它将是一个 XML。

      【讨论】:

      • 感谢罗伯特的回复。我想过是的,但是如果我有一个大类,如果我序列化它,JSON 可能会很大,所以不确定将它存储在 SharedPreferences 中是否是一种好方法......我读到 SharedPreferences 必须用于存储偏好,而不是真正的数据,尤其是当它们很大时。
      • 所以我想对于大数据你应该使用数据库
      • 在阅读了您的第一个回复后,我读到了这个:engineering.meetme.com/2014/03/… 也许最后这是个好主意?
      • IMO 这是最快的方法之一,您必须先创建 SQL 数据库才能访问等等,在这里您只需创建共享首选项(XML 文件),因此编写的代码更少,而且很小努力去做,所以也许你应该尝试添加一些好的单元测试,看看它是如何工作的?也许从卡中读取 json 文件进行一些比较?
      • 是的,SP 更容易使用,要求的代码更少,所以我会尝试一个测试台来比较两者并保持最佳状态。感谢您的帮助罗伯特!
      猜你喜欢
      • 1970-01-01
      • 2013-03-05
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 2014-12-22
      • 2018-08-07
      相关资源
      最近更新 更多