Java 在Android中,重复写入XML文件最有效的方法是什么?

Java 在Android中,重复写入XML文件最有效的方法是什么?,java,android,xml,Java,Android,Xml,我正在编写一个应用程序,它需要在一天中反复向现有XML文件添加节点。下面是我试图附加的节点列表示例: <gx:Track> <when>2012-01-21T14:37:18Z</when> <gx:coord>-0.12345 52.12345 274.700</gx:coord> <when>2012-01-21T14:38:18Z</when>

我正在编写一个应用程序,它需要在一天中反复向现有XML文件添加节点。下面是我试图附加的节点列表示例:

    <gx:Track>
        <when>2012-01-21T14:37:18Z</when>
        <gx:coord>-0.12345 52.12345 274.700</gx:coord>
        <when>2012-01-21T14:38:18Z</when>
        <gx:coord>-0.12346 52.12346 274.700</gx:coord>
        <when>2012-01-21T14:39:18Z</when>
        <gx:coord>-0.12347 52.12347 274.700</gx:coord>
        ....

2012-01-21T14:37:18Z
-0.12345 52.12345 274.700
2012-01-21T14:38:18Z
-0.12346 52.12346 274.700
2012-01-21T14:39:18Z
-0.12347 52.12347 274.700
....
这种情况可能在很长时间内每秒发生几次,我想知道这样做的最佳或最有效的方法是什么

下面是我现在正在做的:使用DocumentBuilderFactory解析XML文件,查找容器节点,附加子节点,然后使用TransformerFactory将其写回SD卡。但是,我注意到,随着文件变大,这将花费越来越多的时间

我试着想出一个更好的方法,这是我唯一能想到的:使用RandomAccessFile加载文件,并使用.seek()将其加载到文件中的特定位置。我会根据文件长度计算位置,然后减去我“知道”的文件长度

我很确定这种方法会奏效,但与DocumentBuilderFactory的易用性相比,它感觉有点盲目


有更好的方法吗

您应该尝试使用JAXB。它是大多数Java1.6JDK中提供的JavaXML绑定库。JAXB允许您指定XML模式定义文件(并对DTD提供了一些实验性支持)。然后,该库将编译Java类,供您在代码中使用,并将其翻译回XML文档


它非常快速且有用,支持可选的验证。这将是一个很好的起点。这是另一个值得一看的。Eclipse还提供了一些很棒的工具来为您生成Java类,并为XSD的创建提供了一个很好的GUI工具。我相信Eclipse插件被称为Davi。

我会说:使用sqlite而不是xml文件?数据库似乎是解决这类问题的正确解决方案。如果您需要它,您可以在需要时将其转换为XML文件。不幸的是,我特别需要XML文件始终位于SD卡上,这是一个不可更改的要求。将XML视为纯文本文件是可以做到的,但在将来更改文件结构时会带来问题。除了DB选项之外,如果您不断更新文件,那么您可以将结构保留在内存中,每次都从头开始创建文件。也可以将文件分割成多个。我有一个非常模糊的答案,但是保留一个单线程来保持文件的更新,并且永远不会释放文件对象。那有帮助吗?