我有40KB的HTML页面,我想在其中找到某些模式。
我可以通过1K缓冲区读取它,但我想避免我正在搜索的模式将在两个缓冲区读取之间拆分的情况。
如何克服这个问题?
答案 0 :(得分:3)
这很容易。您将计算要查找的最长模式,然后将文件指针回溯该量,或者滚动文件,只读取增量。
想象一下最长的模式是26个字节。
编辑:让我澄清一下:有两种方法可以做到这一点,两者都有其优点。如果您从流中读取,我最好使用上面记录的那个,这意味着不支持搜索的数据源。但是,如果您的数据源支持搜索(如文件系统文件),则可以轻松地对搜索执行相同操作。检查图案,如果没有找到,请找回最长图案的尺寸,然后从那里开始。
但是,如果您希望支持搜索长度超过缓冲区大小的模式,则可能需要更加聪明的算法。当你继续读取更多数据时,你需要一个当前“打开”的所有模式的查找表,这反过来会花费更多的内存 - 你会遇到问题。
答案 1 :(得分:2)
这就是Scanner类的用途。
答案 2 :(得分:1)
您可以查看CharBuffer
,为此目的实施CharSequence
答案 3 :(得分:0)
为什么不使用SAX parser。它是为处理大型标记文件而构建的。如果您尝试匹配同一级别的不同元素,则会遇到问题。然而,这并非不可能处理