可以使用ObjectOutputStream将位图写入缓存吗?

时间:2011-03-27 05:14:44

标签: android file-io bitmap serializable fileoutputstream

我有一个名为loadFromCache的方法,如果在缓存中找到它,它会返回一个位图。长话短说我把它缩小到这个方法,如果try / catch失败,最后返回null。

FileInputStream fis = new FileInputStream(getCacheDir()+(""+position));
        ObjectInputStream ois = new ObjectInputStream(fis);
        Bitmap temp = (Bitmap)ois.readObject();
        fis.close();
        return temp;

我之前尝试过Bitmap.compress(...)方法来保存位图,但它们对我的需求来说有点慢...是的,位图已写入这些位置,但我不知道是不是(位图)是可序列化的,它实际上是在保存吗?是的,我记得在写文件时刷新。

2 个答案:

答案 0 :(得分:0)

Bitmap.compress()对你来说太慢了?唯一更快(?)的方法是将位图不变地写入磁盘,见下文。

MappedByteBufferBitmap.copyPixelsToBuffer()一起使用可能会有效。我没有测试过这个,但似乎它可以工作。请注意,您很可能必须自己存储图像尺寸。

答案 1 :(得分:0)

分享我刚刚使用Bitmap.compress的经验非常慢:

我的源图像是jpeg,我将Bitmap.CompressFormat.PNG传递给bitmap.compress。这导致压缩操作需要10-15秒。

一旦我将其更改为JPEG(使源文件和目标文件保持相同的图像格式),操作只需不到一秒钟。也许原始问题是通过类似的方式产生的,也许其他人认为这有用。