我的程序每天运行一次并收集大约300kB,这是HTPP GET请求的结果。它将此数据保存到新的XML文件(daily.xml
)中并将其发布到数据库。
我还想要逐步添加archive.xml
的大型6GB + XML文件(daily.xml
)。为了全面了解,我的XML Schema如下所示。
<?xml version="1.0" ?><add>
<doc>...</doc>
<doc>...</doc>
<doc>...</doc></add>
注意我在新行上分隔了<doc>
个元素,但真实文件的所有内容都在一行上(对于下面的选项2很重要):
我知道StAX无法“修改”XML文件。所以似乎可以使用以下选项:
1。继续使用StAX,并使用临时“合并”文件
我可以将所有6GB + 300 kB写入临时文件并重命名。也就是说,为了保持XML的完整性,我可以使用StAX来读取和组合archive.xml
和daily.xml
并写入archive.temp.xml
,然后重命名为archive.xml以覆盖旧文件。
为了添加~300kB,本能地复制大文件本身效率低下。更不用说它在磁盘空间上非常昂贵,例如短时间内需要大约2x6GB的空间。
2。忽略StAX实现并恢复为文件的字符串操作
这包括以下几个步骤:
daily.xml
编写尾根元素</add>
并关闭文件
第二个项目符号,打开文件并查找/删除尾根元素似乎并不高效。
第3。使用字符串操作和RandomAccessFile
Java有一个RandomAccessFile类,允许我通过放置光标来修改archive.xml
。将需要与上述类似的步骤,例如,我需要找到尾随根元素并插入每日文本。
这是一个本地类,所以我不知道它在没有构建测试的情况下效率如何,但是搜索结果使它看起来像是一种操作大文件的相当低效的方法(即它很慢)。
这样做是否有共同的做法?文本编辑器如何做同样的事情?