`

android异步图片加载中的图片缓存

阅读更多

读取大文件流的问题:缓存开多线程把图片从网络上荡下来以后,首先缓存至本地文件夹 //android.content.ContextWrapper.getCacheDir() android系统提供的一个存放和得到缓存文件夹的方法
然后对文件全路径截取后缀之前的内容进行MD5加密并与后缀拼成一个文件名,根据这个文件名和传入的路径构建一个文件 写一个缓存方法  判断是否存在缓存文件
如果是则返回加密后文件的Uri,如果不是则从网上下载文件并返回文件的Uri.做缓存的目的是用缓存的文件,而Uri就可以唯一标识一个文件。
public static Uri cacheFile(String path,File saveDir)throws Exception{    File file = new File(saveDir, MD5.getMD5(path)+ path.substring(path.lastIndexOf('.')));
    if(file.exists()){
        return Uri.fromFile(file);    
    }else{
        FileOutputStream outStream = new FileOutputStream(file);
        HttpURLConnection conn = (HttpURLConnection)new URL(path).openConnection();
        conn.setConnectTimeout(5 * 1000);
        conn.setRequestMethod("GET");
        if(conn.getResponseCode()==200){
            InputStream inStream = conn.getInputStream();
            byte[] buffer = new byte[1024];
            int len = 0;
            while( (len = inStream.read(buffer)) !=-1 ){
                outStream.write(buffer, 0, len);
            }
            outStream.close();
            inStream.close();
            return Uri.fromFile(file);
        }else{
            throw new Exception("文件下载失败!");
        }
    }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics