1

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

4

2 回答 2

1

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

于 2012-05-04T14:09:29.803 回答
1
  1. Matcher.replaceAll()返回一个新的字符串。它不会修改源字符串。让您MappedByteBuffer进入 READ_WRITE 模式丝毫不能改变这一点。

  2. 除非新旧字符串的长度相同,否则您通常不能用其他字符串替换文件中的字符串。所以无论如何你都必须写一个新文件。

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

于 2012-05-06T09:33:17.350 回答