本地缓存

来源:互联网 发布:手机服务器端口查询 编辑:程序博客网 时间:2024/05/01 22:50
import java.util.ArrayList;import java.util.HashMap;public final class Demo {private long ID=0;private HashMap<String,String> nameUrlMap;private HashMap<String,String> urlNameMap;private HashMap<String,Long> urlTimeMap;private HashMap<Long,String> timeUrlMap;private HashMap<String,Integer> urlSizeMap;private ArrayList<Long> timeList;private int size;private int useSize;private String formatList;private static String[] ZEROS={"","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000"};private static int NAMELEN=16;public Demo(){this.ID=0;this.useSize=0;this.size=10*1024*1024;this.formatList="jpg/jpeg/png/gif/bmp/amr/mid/mp3/mp4/rm/rmvb/3gp/flv";this.timeList=new ArrayList<Long>();this.nameUrlMap=new HashMap<String,String>();this.urlNameMap=new HashMap<String,String>();this.urlTimeMap=new HashMap<String,Long>();this.urlSizeMap=new HashMap<String,Integer>();this.timeUrlMap=new HashMap<Long,String>();}    /*****************************************************************************    Description     : 设置缓存的空间大小,    Prototype       : public void setCacheSize(int size)    Input Param     : 参数size表示空间大小,单位为均为字节    Return Value    : 无    *****************************************************************************/    public void setCacheSize(int size) {        /* 在这里实现功能 */    this.size=size;    }    /*****************************************************************************    Description     : 设置支持缓存的文件格式    Prototype       : public void setCacheFormat(String formatList)    Input Param     : formatList,支持的格式列表,输入字符串例如“jpg/jpeg/PNG”,输入不区分大小写    Return Value    : 无    *****************************************************************************/    public void setCacheFormat(String formatList) {        /* 在这里实现功能 */        this.formatList=formatList.toLowerCase();    }    /*****************************************************************************    Description     : 清除设置    Prototype       : public void clearSetting()    Input Param     : 无    Return Value    : 无    *****************************************************************************/    public void clearSetting() {        /* 在这里实现功能 */    this.size=10*1024;    this.formatList="jpg/jpeg/png/gif/bmp/amr/mid/mp3/mp4/rm/rmvb/3gp/flv";    }    /*****************************************************************************    Description    : 存储该URL对应的文件,并返回一个随机生成的文件名     Prototype      : public String cacheResource(String url, int size)    Input Param    : url为常见的HTTP的URL格式, size为资源文件大小    Output Param   : 无         Return Value   : 成功返回新生成的文件名;   失败返回:failure    *****************************************************************************/    public String cacheResource(String url, int size) {        /* 在这里实现功能 */    if(size>this.size){    return "failure";    }    String format=url.substring(url.lastIndexOf(".")+1);    if(!this.formatList.contains(format.toLowerCase())){    return "failure";    }    long curtime=System.currentTimeMillis();    if(this.urlTimeMap.containsKey(url)){    long time=this.urlTimeMap.get(url);    this.timeList.remove(time);    this.timeList.add(curtime);    this.urlTimeMap.put(url, curtime);    this.timeUrlMap.remove(time);    this.timeUrlMap.put(curtime, url);    return this.urlNameMap.get(url);    }    while(size>this.size-this.useSize){    long time=timeList.remove(0);    String turl=this.timeUrlMap.get(time);    String tname=this.urlNameMap.get(turl);    int tsize=this.urlSizeMap.get(turl);    this.urlNameMap.remove(turl);    this.nameUrlMap.remove(tname);    this.urlTimeMap.remove(turl);    this.timeUrlMap.remove(time);    this.urlSizeMap.remove(turl);    this.useSize-=tsize;    }    String name=this.ID+"."+format;name=ZEROS[NAMELEN-name.length()]+name;this.ID++;//System.out.println(name);this.timeList.add(curtime);    this.urlSizeMap.put(url, size);this.urlNameMap.put(url, name);this.nameUrlMap.put(name, url);this.urlTimeMap.put(url, curtime);this.timeUrlMap.put(curtime, url);this.useSize+=size;return name;    }    /*****************************************************************************    Description    : 根据新生成的文件名,获取该资源文件对应的URL,为cacheResource的逆操作    Prototype      : public String getUrlByName(string filename)    Input Param    : filename为cacheResource生成的文件名    Output Param   : 无         Return Value   : 成功返回URL;   失败返回:failure    *****************************************************************************/    public String getUrlByName(String filename) {        /* 在这里实现功能 */    if(this.nameUrlMap.containsKey(filename)){    return this.nameUrlMap.get(filename);    }    return "failure";    }    /*****************************************************************************    Description     : 返回url对应的文件在缓存中是否存在    Prototype       : public boolean checkCache(String url)    Input Param     : 待查询的url    Return Value    : 成功返回true,失败返回false    *****************************************************************************/    public boolean checkCache(String url) {        /* 在这里实现功能 */    return this.urlNameMap.containsKey(url);    }    /*****************************************************************************    Description     : 清除cache    Prototype       : public void clearCache(String url)    Input Param     : 无    Return Value    : 无    *****************************************************************************/    public void clearCache() {        /* 在这里实现功能 */    this.useSize=0;    this.timeList.clear();    this.urlNameMap.clear();    this.urlSizeMap.clear();    this.urlTimeMap.clear();    this.timeUrlMap.clear();    this.nameUrlMap.clear();    }}

0 0
原创粉丝点击