Java:如何在LARGE二进制文件中查找字符串模式?

1 java algorithm binaryfiles out-of-memory pattern-matching

我正在尝试编写一个程序,它将读取非常大的二进制文件并尝试查找2个不同字符串的出现,然后打印与模式匹配的索引.为了示例,我们假设字符序列是[H,e,l,l,o][H,e,l,l,o, ,W,o,r,l,d].

我能够为小二进制文件编写代码,因为我将每个字符作为一个字节读取,然后将其保存在Arraylist.然后从的开头开始Arraylist,我是比较byte arraylist(byte[] data)byte[] pattern.

我需要找到一种方法来做同样的事情,但没有在内存中写入整个二进制文件进行比较.这意味着我应该能够在阅读每个字符时进行比较(我不应该将整个二进制文件保存在内存中).假设二进制文件仅包含字符.

有关如何实现这一目标的任何建议?谢谢大家.

ami*_*mit 5

好像你真的在寻找Aho-Corasick字符串匹配算法.

该算法根据您拥有的给定字典构建自动机,然后允许您使用输入字符串的单次扫描查找匹配项.

维基百科文章链接到这个java实现