我的一个学生要完成的任务是检查文件中是否存在正则表达式匹配字符串。 诀窍是他的老师禁止立即阅读整个文件然后解析它。相反,他说他应该使用缓冲区。 问题是你永远不知道你想从文件中读取多少输入:如果你只从文件中读取一个字符,可能会有一个匹配的序列。
所以老师写了(翻译): 使用解析器已知的技术:
那么它应该如何完成(想法)?在我看来,它并没有解决上述问题,而且非常愚蠢和浪费。
答案 0 :(得分:2)
当然,Matcher
确实使用了某种内部缓冲区。但是如果你看一下构建Matcher
的原型,你就会发现它作为一个参数唯一需要的是一个简单的CharSequence
,它只有三个操作:
CharSequence
)。从文件中读取时,一种可能性是使用FileChannel.map()
映射整个文件,然后使用适当的CharsetDecoder
读取CharBuffer
(实现CharSequence
)。或者以大块的方式做到......
...或者使用你真正的疯狂想法:this!我已经在800多个MiB文件上进行了测试,它可以工作......
答案 1 :(得分:1)
老师在说什么:
这看起来很现实。
BufferedReader读取线条看起来并不完全合适。也许你可以考虑一个字节数组,BufferedInputStream。