从Java缓冲区中进行高效的模式搜索?

时间:2012-03-31 11:29:11

标签: java algorithm search buffer

在使用缓冲区搜索字节模式时,我一直试图找出一种有效的工作方式,而无需从文件中读取两次。我已经选择实现Runnable,所以我可以将我的任务分成并发线程。我的代码看起来像这样:

// constructor: initializes local variables.
public BytePatternSearcher(RandomAccessFile raFile, byte[] pattern, int bufferSize, long startPos, long endPos);

public void run()
{
    while(amountToRead - raFile.read(buffer) > 0)
    {
        // search code
    }
{

现在,我遇到了麻烦:我的算法在简单的情况下工作,但在复杂的情况下不工作。我假设在一个已经被搜索的模式中没有出现模式的情况,模式长度比缓冲区短,依此类推,一次限制为一次扫描并且只是迭代文件。当然,这不是一个非常强大的解决方案。假设我的模式为'xxxxx'(长度为5),我的文件为'xxxxxxyxxxxxx',我的缓冲区大小为2(x和y代表某些字节值)。该字符串出现4次,每次检查所需的缓冲区长度超过两倍。

如果不对所有情况多次检查相同的字节,我该如何处理?

1 个答案:

答案 0 :(得分:2)

维基百科有一个Boyer–Moore string search algorithm条目,其中还包含一些示例实现。