为什么我们需要在Java中使用流?

时间:2015-09-24 19:24:01

标签: java android

假设我需要获取文件。为什么我需要使用流?

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

1 个答案:

答案 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);
  }
}