Java 在android中提高文件保存性能

Java 在android中提高文件保存性能,java,android,file,bitmap,Java,Android,File,Bitmap,我在外部存储器上有100个图像,我在for循环中执行以下两个任务 将每个项目作为位图加载,并将其与另一个位图合并 将结果保存为内存中的新文件 对于100张图片来说,这需要花费太多的时间。合并位图很快就可以退出,但将结果保存到文件中会花费太多时间。有什么办法来推动这个问题吗?将位图保留在内存中并批量保存文件可能会导致OutOfMemoryException 以下是合并位图的方法: 以下是我将位图保存到文件的方式: File imageFileFolder = new File(St

我在外部存储器上有100个图像,我在for循环中执行以下两个任务

  • 将每个项目作为位图加载,并将其与另一个位图合并
  • 将结果保存为内存中的新文件
  • 对于100张图片来说,这需要花费太多的时间。合并位图很快就可以退出,但将结果保存到文件中会花费太多时间。有什么办法来推动这个问题吗?将位图保留在内存中并批量保存文件可能会导致OutOfMemoryException

    以下是合并位图的方法:

    以下是我将位图保存到文件的方式:

           File imageFileFolder = new File(Statics.TEMP_PATH);
        imageFileFolder.mkdirs();
        FileOutputStream out = null;
        File imageFileName = new File(imageFileFolder, imageName);
        try {
            out = new FileOutputStream(imageFileName);
            imageBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
            out.flush();
            out.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    

    请注意,所有这些都在一个异步任务块中。

    最后,我提供了将位图另存为jpeg的解决方案。保存250k png位图几乎需要500毫秒。jpeg格式的相同位图大约需要50毫秒。虽然质量不一样,但它看起来是质量和性能之间的折衷

    最后,我提出了将位图另存为jpeg的解决方案。保存250k png位图几乎需要500毫秒。jpeg格式的相同位图大约需要50毫秒。虽然质量不一样,但它看起来是质量和性能之间的折衷

    您可以尝试是否添加缓冲区,即
    out=new BufferedOutputStream(new FileOutputStream(imageFileName),8*1024)(也可以尝试更大的尺寸)有任何可测量的效果。什么是太多的时间?请告诉我有多少秒。还要告诉文件大小。使用cpu核心和线程。每芯一根线。保存文件是一项昂贵的任务。如果你有什么解决办法,请告诉我,我会告诉你区别。因为数据集不是很重要。@zapl好的,我会检查你没有提供我要的信息。我已经告诉过你一个解决方案。你可以尝试是否添加一个缓冲区,例如,
    out=newbufferedoutputstream(newfileoutputstream(imageFileName),8*1024)(也可以尝试更大的尺寸)有任何可测量的效果。什么是太多的时间?请告诉我有多少秒。还要告诉文件大小。使用cpu核心和线程。每芯一根线。保存文件是一项昂贵的任务。如果你有什么解决办法,请告诉我,我会告诉你区别。因为数据集不是很重要。@zapl好的,我会检查你没有提供我要的信息。我已经告诉过你一个解决办法。