Разработка для встраиваемых систем сопряжена со многими проблемами, с которыми не приходится сталкиваться при разработке, скажем, в среде настольных компьютеров. В настоящее время я сталкиваюсь с проблемой преобразования большого файла (возможно, 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, или мне не повезло?