使用charBuffer查找/替换

时间:2012-05-04 13:34:24

标签: java pattern-matching nio replace

我是NIO课程的新手;我正在研究一些与(可能)非常大的文本文件匹配的模式,到目前为止,我正在通过将其通道映射到byteBuffer来读取文件中的数据,然后将其转换为charBuffer。我的问题是,将charBuffer的MapMode设置为READ_WRITE,有没有办法直接修改charBuffer,因为我正在处理它,ala matcher.replaceAll()?或者我需要使用matcher.find()循环并手动替换模式的每个实例吗?

2 个答案:

答案 0 :(得分:1)

我首先尝试阅读整个文件并进行查找和替换,看看性能是否可以接受。如果没有,请尝试阅读足够的文本以创建匹配,然后对文本的该部分进行替换。根据模式/性能,您可能需要编写自定义解析器。

答案 1 :(得分:1)

  1. Matcher.replaceAll()返回一个新的String。它不会修改源字符串。将您的MappedByteBuffer置于READ_WRITE模式无法轻易改变。

  2. 除非旧字符串和新字符串的长度相同,否则通常不能用其他字符串替换文件中的字符串。所以你必须在任何情况下写一个新文件。

  3. 我同意@Garret Hall的回答。我会让它与BufferedReader一起工作,然后决定我是否确实遇到了性能问题。