Преобразование больших файлов в массив байтов на Android - PullRequest
1 голос
/ 18 мая 2011

Разработка для встраиваемых систем сопряжена со многими проблемами, с которыми не приходится сталкиваться при разработке, скажем, в среде настольных компьютеров. В настоящее время я сталкиваюсь с проблемой преобразования большого файла (возможно, 10-100 МБ) в массив байтов, учитывая мои ограниченные ресурсы (память). Две реализации, которые я использовал, вызывают причину ужаса

java.lang.OutOfMemoryError

Я начал реализовывать это сам:

   /** Converts the given File to an array of bits. */
    private byte[] fileToBytes(File file) {

        InputStream input_stream = new BufferedInputStream(new FileInputStream(file));  
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();     
        byte[] data = new byte[16384]; // 16K
        int bytes_read;
        while ((bytes_read = input_stream.read(data,0,data.length)) != -1) {
           buffer.write(data, 0, bytes_read);
        }   
        input_stream.close();               
        return buffer.toByteArray();
}

Тогда решил использовать проверенный Apache commons-io, чтобы справиться с этим для меня, но та же ошибка. Это можно сделать в мобильной среде, такой как Android, или мне не повезло?

Ответы [ 2 ]

1 голос
/ 18 мая 2011

Чтобы преобразовать файл в байтовый массив, вы можете использовать DatanputStream.

byte[] lData = new byte[file_length];

DataInputStream lDataIS = new DataInputStream(InputStream);
lDataIS.readFully(lData);

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

1 голос
/ 18 мая 2011

Вы не можете поместить такой большой файл в память в Android, потому что размер кучи в Android ограничен примерно 16-32 МБ в зависимости от устройства.Итак, вы должны как-то переделать свое приложение.

...