五种不同的 URL 参数解析方法的性能比较
来源:互联网 发布:saas企业级软件 编辑:程序博客网 时间:2024/06/06 01:07
因为在我们的项目中需要解析日志中的 URL 的参数,所以我对比了一下五种不同 的 URL 参数解析方法的性能。
URL 参数解析方法:
httpclient org.apache.http.client.utils.URLEncodedUtils
URLEncodedUtils.parse(query, Charset.forName("UTF-8"));
jettyUtil org.eclipse.jetty.util.UrlEncoded
MultiMap<String> values = new MultiMap<String>(); UrlEncoded.decodeTo(query, values, "UTF-8", 1000);
tomcat org.apache.catalina.util.RequestUtil
Map<String, String> values = new HashMap<String, String>(); RequestUtil.parseParameters(values, query, "UTF-8");
regex 正则表达式
String u = URLDecoder.decode(url, "UTF-8"); for (String s : parameters) { Pattern p = Pattern.compile(s + "=([^&]*)(&|$)"); Matcher m = p.matcher(u); if (m.find()) { m.group(1); } }
split 使用String 的split 方法对 URL 进行分割,然后用equals 匹配对应的 参数
String u = URLDecoder.decode(url, "UTF-8"); for (String s : parameters) { String[] a = new String[100]; if (u.indexOf(s) != -1) { a = (u.substring(u.indexOf(s))).split("&"); a[0].split("="); } }
前三者是 httpclient, jetty, tomcat 使用的 URL 解析工具。Split 方法是最简单 也是最直观的解析方法,regex 则使用了正则表达式去匹配参数。
性能比较
用这五种方法分别解析同一个URL 100000遍,得到如下的数据。考虑到 Java 的代 码缓存特性,共运行4遍这样的测试,测试数据取最后一次的结果。
---first---httpclient: 3063jettyUtil: 1767tomcat: 2405regex: 9226split: 22905---second---httpclient: 2766jettyUtil: 1618tomcat: 2229regex: 9025split: 23661---third---httpclient: 2799jettyUtil: 1632tomcat: 2251regex: 8761split: 23476---fouth---httpclient: 2989jettyUtil: 1634tomcat: 2251regex: 8895split: 23571
在最后一组数据中,我们可以看到 jettyUtil 的性能最高,split 和 regex 的方法性 能较差。
总结
jettyUtil 解析URL的性能在五种中最高,如果我们在项目中需要解析 URL ,应该 尽可能的考虑使用 jettyUtil 来解析。
参考链接
- 本测试的代码 https://gist.github.com/hellojinjie/5651936
- Tomcat RequestUtil 的代码http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/util/RequestUtil.java?view=markup
- jettyUtil UrlEncoded 的代码 http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-util/src/main/java/org/eclipse/jetty/util/UrlEncoded.java
- httpclient URLEncodedUtils 的代码 https://svn.apache.org/repos/asf/httpcomponents/httpclient/tags/4.0-beta1/module-client/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java
0 0
- 五种不同的 URL 参数解析方法的性能比较
- 五种不同的 URL 参数解析方法的性能比较
- 五种不同的 URL 参数解析方法的性能比较
- 五种不同的 URL 参数解析方法的性能比较
- 五种不同的 URL 参数解析方法的性能比较
- 五种不同的 URL 参数解析方法的性能比较
- 两种不同字符串比较方法的性能对比
- Struts2解析参数与普通方法解析参数的不同
- Javascript获取url参数(queryString)一个比较简洁的方法
- js 解析URL 的参数
- java 解析url的参数
- 解析URL参数方法
- SQL Server分页存储过程的五种方法及性能比较
- 五种SQL Server分页存储过程的方法及性能比较
- 五种SQL Server分页存储过程的方法及性能比较
- 五种SQL Server分页存储过程的方法及性能比较
- URL编码方法的比较
- URL编码方法的比较
- 洛谷 3145
- latex 表格如何控制行高,行距,行与行之间的距离
- Matlab如何读取文本文件
- 前58同城首席架构师:做自己人生的架构师
- Broadcast Receiver开启服务而不是子线程处理耗时操作
- 五种不同的 URL 参数解析方法的性能比较
- OpenCV 3.1.0中的Mat对象使用
- 求两个字符串的最长公共子串的长度
- ViewPager指示器
- filter、interceptor区别
- 第三章 进程(操作系统概念第七版)
- 编译原理之正规文法和正规式
- 智能插座的一键无线配置是如何实现的?
- 常规压缩算法题