在使用缓冲区搜索字节模式时,我一直试图找出一种有效的工作方式,而无需从文件中读取两次。我已经选择实现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次,每次检查所需的缓冲区长度超过两倍。
如果不对所有情况多次检查相同的字节,我该如何处理?