缓存位图代码令人困惑

时间:2011-07-28 15:23:14

标签: android

有人可以注释掉这段代码,让我更好地了解这段代码中的最新情况吗?

感谢。

private void putBitmapInDiskCache(Uri url, Bitmap avatar) {     
File cacheDir = new   File(context.getCacheDir(), "thumbnails");   
File cacheFile = new File(cacheDir, ""+url.hashCode());    
 try {      
  cacheFile.createNewFile();       
  FileOutputStream fos = new FileOutputStream(cacheFile);      
 avatar.compress(CompressFormat.PNG, 100, fos);       
 fos.flush();       
 fos.close();    
 } catch (Exception e) {      
Log.e(LOG_TAG, "Error when saving image to cache. ", e);     
}  
 } 

要阅读它们,它们是相似的:

fis = new FileInputStream(cacheFile);   
Bitmap local = BitmapFactory.decodeStream(fis); 

1 个答案:

答案 0 :(得分:7)

/**
 * Write bitmap associated with a url to disk cache
 */
private void putBitmapInDiskCache(Uri url, Bitmap avatar) {     
    // Create a path pointing to the system-recommended cache dir for the app, with sub-dir named
    // thumbnails
    File cacheDir = new   File(context.getCacheDir(), "thumbnails");   
    // Create a path in that dir for a file, named by the default hash of the url
    File cacheFile = new File(cacheDir, ""+url.hashCode());    
    try {      
        // Create a file at the file path, and open it for writing obtaining the output stream
        cacheFile.createNewFile();       
        FileOutputStream fos = new FileOutputStream(cacheFile); 
        // Write the bitmap to the output stream (and thus the file) in PNG format (lossless compression)     
        avatar.compress(CompressFormat.PNG, 100, fos);
        // Flush and close the output stream       
        fos.flush();       
        fos.close();
    } catch (Exception e) {
        // Log anything that might go wrong with IO to file      
        Log.e(LOG_TAG, "Error when saving image to cache. ", e);     
    }  
} 

第二部分:

// Open input stream to the cache file
fis = new FileInputStream(cacheFile); 
// Read a bitmap from the file (which presumable contains bitmap in PNG format, since
// that's how files are created)
Bitmap local = BitmapFactory.decodeStream(fis);