执行string.endsWith()工作的优化方式。

时间:2013-03-11 10:44:22

标签: java regex string algorithm bytearray

我需要查找Application Server收到的所有Web请求,以检查URL是否具有.css,.gif等扩展名

提到tomcat如何监听每个请求,并选择正确配置的Servlet来提供服务。 CharChunkMessageBytesMapper

我的想法是实现:

  • 加载我们想要比较的所有扩展并获取字节 代表他们。
  • 通过总结字节数组中的字节来获取此xtension的唯一值//例如:“css”.getBytes()
  • 将结果值添加到已排序列表
  • 每当我们收到请求时,请获取URL的字节表示//例如:“flipkart.com/eshopping/images/theme.css".getBytes()
  • 开始从字节数组的最后一个索引求和字节,并在遇到“。”时中断。点字节值
  • 搜索与排序列表相加的值的存在//在此处使用二进制搜索

请提供有关实施和问题的反馈,如果有的话。

- 谢谢,克里希纳

1 个答案:

答案 0 :(得分:3)

这听起来方式比它需要的更复杂。

  • 使用String.lastIndeXOf查找网址中的最后一个点
  • 使用String.substring根据
  • 获取扩展程序
  • 对于一组受支持的扩展程序,请HashSet<String>;如果要将扩展程序映射到其他扩展程序,则为HashMap<String, Whatever>

我会非常震惊发现这个简单的方法被证明是一个性能瓶颈 - 而且我怀疑它会比你建议的方法更有效率 ,因为它不需要将整个URL转换为字节数组...(不清楚为什么你的方法使用字节数组而不是从char值形成散列。)

从根本上说,我首选的表现方法是:

  • 预先设计和测试以后难以改变的东西,在架构上
  • 其他一切:
    • 首先确定效果标准,以便知道何时可以停止
    • 编写最简单的代码
    • 使用实际数据进行测试
    • 如果效果不佳,请使用分析器(等)来确定瓶颈所在的位置,并优化确保您可以使用现有测试证明的好处