提供三个功能:
根据短网址查找真实地址
删除短网址
获取真实地址的短网址,如果没有,生成一个
思路:将真实地址进行md5加密,并分割生成一个6位的短链接,并保存到xml文件中,当然也可以保存到数据库中。无法实现将短链接反转成真实地址,因为md5的不可逆性。只能根据短链去持久化xml文件中去查找,这样必然会造成效率上的损失。
测试开销如下(xml文本大约80000行,约15000个短网址,读取速度:308ms,写入速度:314ms)。如果有更好的思路,欢迎留言,我将继续尝试
ShortUrlUtil.class
public class ShortUrl {
public static void main(String[] args) {
String longUrl = "http://www.test.com";
String shortUrl = "uUN3E3";
// 转换成的短链接后6位码
Long start=System.currentTimeMillis();
// System.out.println(getLongUrl(shortUrl));
// System.out.println(getShortUrl(longUrl));
System.out.println(deleteUrl(shortUrl));
Long end=System.currentTimeMillis();
System.out.println("重写xml结束"+((end-start)));
}
/**
*根据短网址查找真实地址
*/
public static String getLongUrl(String shortUrl){
String longUrl =getLongUrl(0,shortUrl);
return longUrl;
}
/**
*根据短网址查找真实地址
*/
public static boolean deleteUrl(String shortUrl){
String longUrl =getLongUrl(0,shortUrl);
boolean isSuccess=true;
if(Validate.noNull(longUrl)){
isSuccess=deleteUrl(0,shortUrl);
}
return isSuccess;
}
/**
*获取真实地址的短网址,如果没有,生成一个
*/
public static String getShortUrl(String longUrl){
String shortUrl=getShortUrl(0,longUrl);
if(Validate.isNull(shortUrl)){
final String _shortUrl=shortUrl(longUrl);
new Thread(
new Runnable() {
@Override
public void run() {
createXml(_shortUrl, longUrl);
}
}
).start();
return _shortUrl;
}
return shortUrl;
}
/**
*将请求生成短网址
*/
private static String shortUrl(String url) {
// 可以自定义生成 MD5 加密字符传前的混合 KEY
String key = "";
// 要使用生成 URL 的字符
String[] chars = new String[]{
"a", "b", "c"