- 浏览: 75947 次
- 性别:
- 来自: 上海
最新评论
-
rockythd:
视界这个概念终于搞清楚了,谢谢!
Java关于Scala的“视界(view bound)”的模拟 -
regular:
写了一个更通用的方法:ObjectUtils.cast。目的是 ...
Java关于Scala的“视界(view bound)”的模拟 -
lrztiancai:
谢谢分享。正在找这个!
Parsley+SpiceLib 2.4 Developer Manual -
kraft:
第二版什么时候出啊
Programming In Scala 翻译 -
justjavac:
xpf7622 写道haixu.huang@live @前的名 ...
Programming In Scala 翻译
速度还算快,例子里比较的文件一共371个,3,293,472字节,比较时间不超过2秒。
不过我的机器也很好,CPU: Athelon 64 X2 Dual 5200+,Mem: 2GB DDR2 667。
package cn.sh.huang; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.text.DateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.regex.Pattern; /** * * @author Huang, Haixu */ public class Main { /** * @param args the command line arguments */ public static void main(String[] args) throws FileNotFoundException, IOException { Calendar c = Calendar.getInstance(); FileFilter filter = new FileFilter() { String s = "*.java"; { s = s.replace('.', '#').replaceAll("#", "\\\\."); s = s.replace('*', '#').replaceAll("#", ".*"); s = s.replace('?', '#').replaceAll("#", ".?"); s = "^" + s + "$"; } Pattern p = Pattern.compile(s); public boolean accept(File file) { return file.isDirectory() ? true : (p.matcher(file.getName()). matches()); } }; List idxList = checkFolder("C:\\Program Files\\Java\\jdk1.6.0_13\\demo", filter, "DocumentEvent".getBytes("US-ASCII")); for (int i = 0, size = idxList.size(); i < size; i++) { System.out.println(idxList.get(i)); } DateFormat df = DateFormat.getTimeInstance(); System.out.println("From " + df.format(c.getTime()) + " to " + df.format(Calendar.getInstance().getTime())); } private static List checkFolder(String folderName, FileFilter filter, byte[] pattern) throws FileNotFoundException, IOException { File folder = new File(folderName); File[] files = folder.listFiles(filter); if (files == null) { return null; } List list = new ArrayList(); for (int i = 0; i < files.length; i++) { File file = files[i]; String fileName = file.getAbsolutePath(); if (file.isDirectory()) { List subList = checkFolder(fileName, filter, pattern); if (subList != null) { list.addAll(subList); } } else { int[] idxz = checkFile(fileName, pattern); if (idxz.length > 0) { StringBuffer sb = new StringBuffer(fileName + "# "); for (int j = 0; j < idxz.length; j++) { sb.append(idxz[j]).append(" "); } list.add(sb.toString()); } } } return list; } private static int[] checkFile(String fileName, byte[] pattern) throws FileNotFoundException, IOException { File file = new File(fileName); int fileLen = (int) file.length(); FileInputStream fis = new FileInputStream(file); return getPatternIndexz(fis, fileLen, 0, pattern); } private static int[] getPatternIndexz(FileInputStream fis, int fileLen, int index, byte[] pattern) throws IOException { fis.skip(index); final Rule[] rules = getShiftRule(pattern); byte[] buffer = new byte[pattern.length]; List idxList = new ArrayList(); int shift = pattern.length; while (fileLen > shift) { int remain = pattern.length - shift; if (remain > 0) { System.arraycopy(buffer, shift, buffer, 0, remain); } int readed = 0; do { readed = fis.read(buffer, remain + readed, shift - readed); } while (shift > readed); fileLen -= shift; shift = match(buffer, pattern, rules); if (shift == 0) { idxList.add(new Integer(index)); shift = pattern.length; } index += shift; } int[] idxz = new int[idxList.size()]; for (int i = 0; i < idxz.length; i++) { idxz[i] = ((Integer) idxList.get(i)).intValue(); } return idxz; } private static Rule[] getShiftRule(final byte[] pattern) { int endPos = pattern.length - 1; List idxList = new ArrayList(); for (int i = endPos - 1; i >= 0; i--) { idxList.add(new Integer(i)); } List ruleList = new ArrayList(); Set flagSet = new HashSet(); for (int i = endPos; i >= 0 && idxList.size() > 0; i--) { byte p = pattern[i]; List shadowIdxList = new ArrayList(); for (int j = 0, size = idxList.size(); j < size; j++) { int idx = ((Integer) idxList.get(j)).intValue(); int pos = idx - (endPos - i); if (pos < 0) { ruleList.add(new Rule(i, null, endPos - idx)); } else { byte pp = pattern[pos]; if (pp != p) { Byte ppp = new Byte(pp); if (!flagSet.contains(ppp)) { flagSet.add(ppp); ruleList.add(new Rule(i, ppp, endPos - idx)); } } else { shadowIdxList.add(idxList.get(j)); } } } flagSet.clear(); idxList = shadowIdxList; } return (Rule[]) ruleList.toArray(new Rule[ruleList.size()]); } private static int match(final byte[] buffer, final byte[] pattern, Rule[] rules) { int default_shift = pattern.length; for (int i = pattern.length - 1; i >= 0; i--) { byte b = buffer[i], p = pattern[i]; if (b != p) { for (int j = 0; j < rules.length; j++) { Rule rule = rules[j]; Byte pp = rule.getP(); if (pp == null) { default_shift = rule.getShift(); continue; } int idx = rule.getIdx(); if (i < idx) { // Next rule continue; } else if (i == idx) { if (pp.byteValue() == b) { return rule.getShift(); } } else { return default_shift; } } return default_shift; // No matching rule } } return 0; } } final class Rule { private final int idx; private final Byte p; private final int shift; public Rule(final int idx, final Byte p, final int shift) { this.idx = idx; this.p = p; this.shift = shift; } /** * @return the idx */ public int getIdx() { return idx; } /** * @return the p */ public Byte getP() { return p; } /** * @return the shift */ public int getShift() { return shift; } }
发表评论
-
把Spring容器中的bean绑定到通过代码创建的对象
2012-04-26 16:17 2210Spring提供了对配置中创建对象的字段实例注入。但如果是通过 ... -
动态注册消息类型及处理函数
2011-10-01 15:56 934内容略。参见代码演示。 -
代码实例
2011-02-14 17:17 956代码实例文件 -
如何在类外部调用被子类覆盖的父类方法
2011-01-20 14:46 1857题目比较绕。以下用一个简单的例子说明: public cl ... -
SWT应用的开发实例:没有使用到OSGi
2011-01-14 11:27 1476添加音效,以及中奖名单回看功能。 SWT应用一枚。具体方法见 ... -
运行期代码问题检查技术的研究
2010-11-29 13:30 1097以下用我之前代码中的一个bug作为说明,解释如何实现代码在运行 ... -
代码潜在故障的动态分析
2010-11-16 12:24 1439引子 大家都听说过FindBugs的大名。这是一款静态代码分析 ... -
健壮的、便捷的、异步的SocketChannel实现
2010-04-27 10:34 8317Socket通信比较常见的问题有如下几种: 1、设置收发超时; ... -
打算研究学习一下OSGi和Equinox
2010-02-10 11:26 1075看到一本很直接讨论这个题目的书,不过要等到3月1日才出来。 ... -
关键应用服务的集群技术模拟
2010-01-08 14:41 1034集群技术,也就是俗称的Cluster,是为了保证某种应用不间断 ... -
JarSpur 检查引用包归属的小工具
2009-12-25 17:31 1031图形化的界面,允许你导入任意多的在项目中可能需要的Jar包。 ... -
class.getResourceAsStream()与ClassLoader.getResourceAsStream()的区别
2009-11-11 17:33 1999在jar包里获得流形式的资源有两种方法,一个是Class.ge ... -
MultiKeyedMap方案的实现
2009-11-10 11:55 3687方案背景 所谓“MultiKey ... -
Java2D: 硬件加速 - 第二部分 - 缓冲策略:Buffer Strategies
2009-11-02 12:52 2875原文地址:Java2D: Hardware ... -
Java2D: 硬件加速 - 第一部分 - 非恒定图像类:Volatile Image
2009-10-30 16:19 4257原文地址:Java2D: Hareware Accelerat ... -
自建的MiniChart库,目前实现了点图、折线图、柱状图和饼图
2009-07-15 11:08 1165花了大约一个星期时间做的MiniChart库。 由于现在的免费 ... -
对于经典模式匹配算法的一些改动
2009-06-12 12:44 1450从一个很长的字符串(或者数组)中,查找某个子串(模式串)是否存 ... -
读写进程的互斥锁
2009-03-16 15:27 1546以下的代码完成了对某个资源的读写互斥锁,具体说明如下:1. 若 ... -
Object数组到泛型数组转换的伪解决方案
2009-01-23 10:44 4201闲来无事,想要用目前的Java技术模拟一个对象数据库。最初只是 ...
相关推荐
自己写的IP搜索--BM模式匹配程序代码 BM模式匹配 根据ip查地址
用C++实现BM的字符串模式匹配算法,两个代码分别实现坏字符规则和好后缀规则
详细介绍了BM字符串匹配的方法及效率问题.
经典的模式匹配算法,目前使用最广的单模匹配算法源代码BM算法
BM算法被认为是亚线性串匹配算法,它在最坏情况下找到模式所有出现的时间复杂度为O(mn),在最好情况下执行匹配找到模式所有出现的时间复杂度为O(n/m)。
该代码是针对字符串精确匹配的BM算法的c代码实现,
GCC编译可用,该程序支持a-z的字符串(注意空格也不在内),如果查找字段需要扩大,可以修改代码增加范围
BM算法源代码,是与KMP相比的优秀字符匹配算法。 算法复杂度为(m+n)
不知道是自己的搜索能力太差还是怎么的,在CSDN上多花了6分下载这些资源,这是我上传的不需要分的资源,enjoy it...
单模式匹配算法 BM算法 很经典的单模式算法
多模式匹配算法 AC_BM算法 算法很经典 欢迎下载
基于bm算法实现的字符串快速匹配代码,支持支付串和二进制数据匹配
IBM模式匹配算法,对中文分析,信息分拣感兴趣的都可以去看看。
这是BM算法的专业版,全面的诠释了BM算法的精髓!
使用了BM匹配算法计算了左右图像的视差图,本次BM匹配算法是使用python3.7,通过调用opencv库函数实现
精典的多模式匹配算法,AC-BM算法的实现代码.在VC6中调试通过.文件中代工程文件.
在分析了目前常用的模式匹配算法的基础上,提出了一种改进的BM算法。实验结果表明改进的模式匹配算法能减少比较次数,有效地提高了匹配速度。
Snort入侵检测使用的BM模式匹配算法,单独列出来了。
从网络入侵检测中提炼出的BM算法,已在VC6中调试通过.
AC-BM多模式匹配算法的研究与改进 ,张慧,罗守山,随着互联网行业的发展,信息的多渠道获得,信息的安全性得到了社会的广泛关注。本文对作为防火墙核心技术之一的模式匹配算法进行