android/java: используйте что-то другое, а не ObjectInputStream для загрузки объекта

#java #android #performance #load #objectinputstream

Вопрос:

У меня есть куча объектов, хранящихся в нескольких файлах, которые мне нужно загрузить в память при запуске моего приложения, вот как я это делаю:

     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
 

Проблема в том, что когда я пытаюсь загрузить объект( HashMap<Integer, int[]> ) размером более 500 кб, на моем телефоне это занимает целую вечность. Я не уверен, что это проблема ObjectInputStream, если это так, существуют ли другие более быстрые способы хранения и извлечения объектов из файла? Чем быстрее, тем лучше, большое спасибо.

Ответ №1:

Вы можете использовать буферы протокола или собственную сериализацию Android: Посылка.

Обновить:

Почему вы храните так много объектов в файле и загружаете их все одновременно в память? Как вы выяснили, это занимает целую вечность и требует много памяти. Есть ли какая-то особая причина, по которой вам это нужно?

Вы должны использовать базу данных — она позволяет выборочно запрашивать данные и загружать только те объекты, которые вам нужны в определенное время.

Комментарии:

1. Я посмотрел на посылку, похоже, что она не подходит для хранения в файле, хотя.

Ответ №2:

Вы пробовали обернуть свой поток ввода файлов в поток ввода буфера? Это сводит к минимуму дорогостоящее взаимодействие с базовым потоком.

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