Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BitmapFactory.decode文件与decodeStream之间的差异_Java_Android_Bitmap_Stream_Bitmapfactory - Fatal编程技术网

Java BitmapFactory.decode文件与decodeStream之间的差异

Java BitmapFactory.decode文件与decodeStream之间的差异,java,android,bitmap,stream,bitmapfactory,Java,Android,Bitmap,Stream,Bitmapfactory,如果我们有一个名为f的文件,两者之间有什么真正的区别吗 BitmapFactory.decodeStream(新文件输入流(f)) 及 BitmapFactory.decodeFile(f.getAbsolutePath())decodeFile()获取文件名并从中解码图像decodeStream()接受InputStream,它可以是文件之外的任何内容。例如,您可以从网络连接或zip文件获取数据,而无需先提取文件 如果您只有一个文件,只需使用decodeFile()否就更容易了 以下是deco

如果我们有一个名为
f
文件
,两者之间有什么真正的区别吗

BitmapFactory.decodeStream(新文件输入流(f))

BitmapFactory.decodeFile(f.getAbsolutePath())
decodeFile()
获取文件名并从中解码图像
decodeStream()
接受
InputStream
,它可以是文件之外的任何内容。例如,您可以从网络连接或zip文件获取数据,而无需先提取文件

如果您只有一个文件,只需使用
decodeFile()

否就更容易了

以下是
decodeFile()
方法的全部内容,来自:


这与你或我将要做的事情没有实质性的区别。

有区别。使用decodeFile()方法无法管理FileNotFound异常,而使用decodeStream()方法则可以


因此,如果确定将加载文件,则应使用decodeFile()。否则,您应该手动初始化文件流并使用decodeStream()方法。

如果
f
严格来说是一个
文件
decodeFile()
将不起作用,因为它只接受一个文件名(
字符串
)。您需要获取文件名。尽管如此,我不认为有任何实际的区别;我总是听说这是一个值得怀疑的做法是的,至少我会把它记录到LogCat上。这将是使用
decodeStream()
的一个好处。许多人想知道为什么它在没有任何警告的情况下返回null。
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;
}