速度问题反序列化Arraylist Android

时间:2013-09-07 22:42:30

标签: java android performance arraylist

我有一个ArrayList allFeeds和一个读取序列化数据的方法。

@SuppressWarnings("unchecked")
public void loadFile() {

    final String FILENAME = "feeds.ser";
    File file = fileContext.getApplicationContext().getFileStreamPath(FILENAME);

    try {           
        FileInputStream fis = new FileInputStream(file);
        ObjectInputStream ois = new ObjectInputStream(fis);
        allFeeds = (ArrayList<Feed>) ois.readObject();
    }
    catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
    catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
} 

序列化数据存储在0.49mb大小的文件中,由33个Feed对象组成。 Feed对象的结构如下,HashMap最多可容纳900个密钥对值:

int id;
String name;
int datatype; 
String tag;
Long time;
Double value;
String dpInterval;  
HashMap<Long, Double> historicFeedData;

将数据加载到arraylist需要相当长的时间(平均时间为13.5秒)。 GC_CONCURRENT在执行期间反复释放内存。

有没有办法提高此操作的速度,还是仅仅是它处理的数据量?如果是这样,是否建议将其推入aSyncTask或后台服务?

2 个答案:

答案 0 :(得分:1)

缓冲inputReader。应节省75%ish。

答案 1 :(得分:1)

正如Tone建议的那样,我修改了代码以包含BufferedInputStream并将其传递给ObjectInputStream:

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

这大大减少了加载时间到3秒多一点。