java - 优化的 string.endsWith() 工作方式。

标签 java regex string algorithm arrays

我需要查找 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/

相关文章:

java - Firebase 实时数据库 .info/connected False 当它应该是 True

java - 如何检查流中是否为空?

javascript - 编译 HTML 后替换回车符 (?)

java - 如何删除字符串中除 "1"和 "2"之外的所有数字?

arrays - 串叉积

Java int 转 char 输出真的很奇怪

java - sqlite + listview + 新 Activity : close() was never explicitly called on database?

python-3.x - 空白字符串的正则表达式

html - 使用正则表达式查找嵌套的 XML 标记

string - 删除字符串Matlab末尾的下划线