将属性添加到海量XML文件的根元素的最快方法是什么?这些文件太大而无法读入内存,我希望避免尽可能多的I / O惩罚。
答案 0 :(得分:5)
如果你在开头或附近插入文字,你是不是还要重写整个文件? SAX解析器应该适用于缓冲输入(通过InputStream),如果你不想在内存中同时使用它。
你仍然可以重写整个文件,但不会立即将内存重写在内存中。基本上,您将解析文件,侦听SAX事件并从这些事件中写出新文件。然后,您的SAX解析器还将侦听添加属性的正确情况。
答案 1 :(得分:0)
几乎不可能不用Java重写文件(如果你在系统级调整文件,我甚至认为你不能这样做,但也许......) - 所以你的问题变成了最多的问题有效的方法来重写文件?
如果可能的话,我会避免使用所有的XML解析器并编写自己的解析器。这将要求您可以轻松识别此新属性需要在文件中的哪个位置。如果您能够提供匹配它的字符串,您可以一次读取一下,扫描插入点并在到达时插入额外数据,然后继续复制其余数据。