我目前正在构建一个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;
}
提前致谢
答案 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);
}
}
}