gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:49:53 26 4
gpt4 key购买 nike

在使用缓冲区搜索字节模式时,我一直在尝试找出一种无需从文件中读取两次的有效工作方式。我选择实现 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)的模式,我的文件是 'xxxxxxxyxxxxxx',我的缓冲区大小是 2(x 和 y 代表某些字节值)。该字符串出现了4次,每次检查都需要两倍以上的缓冲区长度。

如何在不对所有情况多次检查同一字节的情况下解决问题?

最佳答案

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

关于java - 从 Java 中的缓冲区进行高效的模式搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9955484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com