是否会发生XmlSerializer返回的字符串太长而无法成为Java中的字符串?

时间:2015-02-24 16:06:00

标签: java android xml tostring xmlserializer

我目前正在构建一个Android应用程序,并决定使用Xml实现而不是数据库来存储数据。 我在应用程序启动时将xml文件加载到列表中,当我想将其保存回来时,我使用XmlSerializer将其格式化为xml,然后输出到StringWriter。 然后我在StringWriter对象上调用.toString()并将该字符串写回文件。

但是我注意到应用程序xml文件增长得非常快,并且想知道如果它的长度超出最大字符串长度会发生什么。 有没有办法从StringWriter获取字符串数组? 这是我的序列化方法。

public String articlesAsXml() {
XmlSerializer serializer = Xml.newSerializer();
StringWriter writer = new StringWriter();
try {
        serializer.setOutput(writer);
        serializer.startDocument("UTF-8", true);
        serializer.startTag("", "articles");
        for (Articles art: AllArticles){

            serializer.startTag("", "art");

            serializer.startTag("", "id");
            serializer.text(art.Article_Id);
            serializer.endTag("", "id");

            serializer.startTag("", "title");
            serializer.text(art.Article_Title);
            serializer.endTag("", "title");

            serializer.startTag("", "body");
            serializer.text(art.Article_Body);
            serializer.endTag("", "body");

            serializer.endTag("", "art");
        }
        serializer.endTag("", "articles");
        serializer.endDocument();
        return writer.toString();
    }
    catch (Exception e) { return "Failed"; }
    return null;
}

提前致谢

1 个答案:

答案 0 :(得分:1)

字符串可能与您拥有多少可用堆内存一样长。如果您使用它,您将获得OutOfMemoryError

解决方案不是使用StringWriter(它会暂时为之后写入文件的数据分配内存),而是直接将数据写入文件。

BufferedWriter writer = null;
try {
    writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
    serializer.setOutput(writer);
    ...
} catch (IOException e) {
    Log.e(tag, "cannot write to file " + file, e);
} finally {
    if (writer != null) {
        try {
            writer.close();
        } catch (IOException e) {
            Log.e(tag, "cannot close file " + file, e);
        }
    }
}