假设我需要获取文件。为什么我需要使用流?
File file = new File(directory, "image_name.jpg");
FileInputStream streamIn = new FileInputStream(file);
Bitmap bitmap = BitmapFactory.decodeStream(streamIn);
streamIn.close();
为什么要复杂化?当我需要复制数组时,我只需调用clone()
,数组a
的所有字节都复制到变量b
。
int[] a = new int[]{1,2,3,4...1000};
int[] b = a.clone();
为什么我们不能以类似的简单方式获取文件副本:
Bitmap bitmap = someMethodToGetCopyOfFileFromDisk(pathToFile);
答案 0 :(得分:3)
代码中的每一行都会引起关注,几乎没有“偶然的复杂性”。请注意,Bitmap
需要InputStream
来构建自身这一事实被称为灵活性,并因此受到广泛赞赏。如果API“简单”并且只是要求输入文件名,则会强制您在磁盘上的文件中提供数据。如果花了byte[]
,它会强制你将所有数据预加载到堆中,因此堆必须同时保存byte[]
和Bitmap
,从而产生可能是重要的内存开销。
至于必须关闭流,因为Java 7这变得更加简单。以下是我编写将File
转换为Bitmap
的方法的方法:
Bitmap load(File f) {
try (InputStream in = new FileInputStream(file)) {
return BitmapFactory.decodeStream(streamIn);
}
}