【问题标题】:android/java: use something else rather then ObjectInputStream to load an objectandroid/java:使用其他东西而不是 ObjectInputStream 来加载对象
【发布时间】:2011-05-18 10:34:37
【问题描述】:

我有一堆对象存储在几个文件中,我需要在我的应用程序启动时将它们加载到内存中,我就是这样做的:

    FileInputStream fis = null;
    ObjectInputStream ois = null;
    Object result = null;
    try {
        fis = new FileInputStream(inFile);
        ois = new ObjectInputStream(fis);
        result = ois.readObject();
        //and then do something with result

问题是,当我尝试加载一个大小超过 500k 的对象 (HashMap<Integer, int[]>) 时,我的手机需要很长时间。我不确定这是否是 ObjectInputStream 的问题,如果是,是否还有其他更快的方法可以从文件中存储和检索对象?越快越好,非常感谢。

【问题讨论】:

    标签: java android performance load objectinputstream


    【解决方案1】:

    您可以使用Protocol Buffers 或Android 的原生序列化:Parcel

    更新:

    为什么要在一个文件中存储这么多对象并同时将它们全部加载到内存中?正如您发现的那样,它需要很长时间并且使用大量内存。您需要这个有什么特别的原因吗?

    您应该使用数据库 - 它可以让您有选择地查询数据并仅加载您在特定时间需要的对象。

    【讨论】:

    • 我看过 Parcel,但它似乎不适合存储在文件中。
    【解决方案2】:

    您是否尝试过将 FileInputStream 封装到 BufferedInputStream 中?它最大限度地减少了与底层流的昂贵交互。

    ...
    ois = new ObjectInputStream(new BufferedInputStream(fis));
    ...
    

    【讨论】:

      猜你喜欢
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      相关资源
      最近更新 更多