Сколько памяти использует остальная часть вашего приложения? Ваше приложение может использовать максимум 16 МБ (или более в зависимости от устройства), поэтому загрузка файла 3 МБ не должна давать вам нехватку памяти.
Сказав это, я вспоминаю, что существует ограничение на размер файлов, которые вы можете открыть, которые содержатся в пакете приложения (~ 2 МБ). Что вы можете сделать, так это разделить ваш файл на более мелкие файлы с ограничением, а затем использовать http://download.oracle.com/javase/1.4.2/docs/api/java/io/SequenceInputStream.html для чтения этих нескольких файлов, как если бы они были одним файлом.
Кроме того, найдите способ предварительной обработки и сжатия данных, чтобы вы не использовали слишком много памяти.
Ваш код выглядит очень неэффективно. Исходя из опыта написания подобного кода, я предполагаю, что для его запуска требуется около 20 секунд. Это создаст тонны мусора, и все эти операции займут время. Разве вы не можете просто прочитать все свои данные сразу, без обработки для каждой записи? например Вы можете предварительно обработать ваши данные, сериализовать их в объект, а затем просто снять сериализацию в вашем приложении.
Я работал над приложением, которое должно было загрузить файл словаря 3 МБ, и для меня было решено предварительно обработать его в нужную мне оптимизированную структуру данных (снизив требования к пространству до 0,5 МБ), сериализовать, а затем просто загрузить объект непосредственно при запуске.