Java正则表达式替代流上的字节

Wil*_*ill 3 java regex xml stream

我有XML文件(以UTF-8编码)有两个问题:

  • 其中一些(不是全部)包含字节顺序标记 EF BB BF

  • 其中一些(不是全部)包含Null字符00,分布在整个文件中.

这两个问题都阻止我使用SAX Parser解析XML.我目前的方法是将文件读入一个字符串并使用正则表达式来提取这些字符并将字符串写回文件,这很好.但是我的文件非常大(几百兆字节)并且将文件读入一个String并且每次调用replaceAll()时创建一个相同大小的字符串,很快就会导致java堆空间错误.

增加堆大小绝对不是一个长期的解决方案.我需要流式传输文件并动态提取所有这些字符.

有关如何使用高效解决方案的任何建议?

Joa*_*uer 7

我会FilterInputStream在运行时子类化过滤掉不需要的字节.

任务应该相当简单,因为字节顺序标记可能只在文件的开头(所以你只需要检查那里)和nul-bytes可以很容易地通过简单的==比较(不需要类似regex的功能).

这很可能也会提高性能,因为您无需在重新读取之前将完整的更正文件写入磁盘.