#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));
...