Если мы имеем File
по имени f
, есть ли реальная разница междуразница между BitmapFactory.decodeFile против decodeStream
BitmapFactory.decodeStream(new FileInputStream(f))
и
BitmapFactory.decodeFile(f.getAbsolutePath())
Если мы имеем File
по имени f
, есть ли реальная разница междуразница между BitmapFactory.decodeFile против decodeStream
BitmapFactory.decodeStream(new FileInputStream(f))
и
BitmapFactory.decodeFile(f.getAbsolutePath())
No.
Вот полнота метода decodeFile()
от the now-current source code:
public static Bitmap decodeFile(String pathName, Options opts) {
Bitmap bm = null;
InputStream stream = null;
try {
stream = new FileInputStream(pathName);
bm = decodeStream(stream, null, opts);
} catch (Exception e) {
/* do nothing.
If the exception happened on open, bm will be null.
*/
Log.e("BitmapFactory", "Unable to decode stream: " + e);
} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
// do nothing here
}
}
}
return bm;
}
Это не существенно отличается от того, что вы или я бы сделал.
decodeFile()
получает имя файла и декодирует изображение оттуда. decodeStream()
принимает InputStream
, что может быть чем угодно, кроме файла. Например, вы можете извлекать данные из сетевого подключения или из zip-файла, предварительно не извлекая файл.
Если у вас просто есть файл, проще всего использовать decodeFile()
.
Если 'f' является строго' File', 'decodeFile()' не будет работать, поскольку он принимает только имя файла ('String'). Вам нужно будет получить имя файла. При этом я не думаю, что есть какая-то практическая разница. –
Есть разница. Используя метод decodeFile(), вы не можете управлять исключением FileNotFound, используя метод decodeStream().
Итак, если вы уверены, что ваш файл будет загружен, вы должны использовать decodeFile(). В противном случае вы должны инициализировать FileStream вручную и использовать метод decodeStream().
Интересно видеть пустые выписки в официальном исходном коде Android; Я всегда слышал, что это была спорная практика. – KaliMa
Да, я бы записал ее в LogCat, по крайней мере. Это будет одним из преимуществ использования 'decodeStream()'. – CommonsWare
И так много людей задаются вопросом, почему он возвращает null без предупреждения. – greenapps