我需要查找 Application Server 收到的所有 Web 请求,以检查 URL 是否具有 .css、.gif 等扩展名
提到了 tomcat 如何监听每个请求并选择正确配置的 Servlet 来提供服务。 CharChunk , MessageBytes , Mapper
下面是我的实现思路:
- 加载我们喜欢比较的所有扩展并获取字节 他们的代表。
- 通过对字节数组中的字节求和来为此扩展获取唯一值//例如:“css”.getBytes()
- 将结果值添加到排序列表
- 每当我们收到请求时,获取 URL 的字节表示//例如:“flipkart.com/eshopping/images/theme.css”.getBytes()
- 开始对字节数组的最后一个索引中的字节求和,并在遇到“.”时中断。点字节值
- 搜索排序列表中是否存在如此求和的值//此处使用二进制搜索
如果有任何问题,请提供有关实现和问题的反馈。
-谢谢,克里希纳
最佳答案
这听起来方式比实际需要的要复杂。
- 使用
String.lastIndeXOf
找到 URL 中的最后一个点 - 使用
String.substring
以此为基础获得扩展 - 有一个
HashSet<String>
对于一组支持的扩展,或HashMap<String, Whatever>
如果你想将扩展映射到其他东西
我会绝对震惊发现这个简单的方法竟然是一个性能瓶颈 - 事实上我怀疑它会比你建议的方法更有效,鉴于它不需要将整个 URL 转换为字节数组...(不清楚为什么您的方法无论如何都使用字节数组而不是从 char
值形成散列。)
从根本上说,我首选的性能方法是:
- 围绕以后难以在架构上更改的事物进行前期设计和测试
- 对于其他一切:
- 首先确定绩效标准,以便知道何时可以停止
- 编写最简单有效的代码
- 用实际数据进行测试
- 如果它的性能不够好,请使用分析器(等)找出瓶颈所在,并对其进行优化,确保您可以证明使用现有测试的好处
关于java - 优化的 string.endsWith() 工作方式。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15336586/