2016-04-11 3 views

ответ

1

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; 
} 

Это не существенно отличается от того, что вы или я бы сделал.

+0

Интересно видеть пустые выписки в официальном исходном коде Android; Я всегда слышал, что это была спорная практика. – KaliMa

+0

Да, я бы записал ее в LogCat, по крайней мере. Это будет одним из преимуществ использования 'decodeStream()'. – CommonsWare

+0

И так много людей задаются вопросом, почему он возвращает null без предупреждения. – greenapps

0

decodeFile() получает имя файла и декодирует изображение оттуда. decodeStream() принимает InputStream, что может быть чем угодно, кроме файла. Например, вы можете извлекать данные из сетевого подключения или из zip-файла, предварительно не извлекая файл.

Если у вас просто есть файл, проще всего использовать decodeFile().

+0

Если 'f' является строго' File', 'decodeFile()' не будет работать, поскольку он принимает только имя файла ('String'). Вам нужно будет получить имя файла. При этом я не думаю, что есть какая-то практическая разница. –

0

Есть разница. Используя метод decodeFile(), вы не можете управлять исключением FileNotFound, используя метод decodeStream().

Итак, если вы уверены, что ваш файл будет загружен, вы должны использовать decodeFile(). В противном случае вы должны инициализировать FileStream вручную и использовать метод decodeStream().

Смежные вопросы