Вы сохраняете файл в памяти полностью, а затем записываете этот буферный файл в хранилище. Вместо этого пропустите буферизацию и запишите фрагменты в хранилище по мере их поступления.
FileOutputStream fos = new FileOutputStream(file);
while ((current = bis.read()) != -1) {
fos.write(current);
}
fos.close();
примечание ... не разработчик Android, так что не знаю, сработает ли это на самом деле, так что рассматривайте это как псевдокод.