XmlSerializer 是不是会返回一个太长而不能成为 Java 字符串的字符串?
Posted
技术标签:
【中文标题】XmlSerializer 是不是会返回一个太长而不能成为 Java 字符串的字符串?【英文标题】:Could it happen that XmlSerializer returns a String which is too long to be a string in Java?XmlSerializer 是否会返回一个太长而不能成为 Java 字符串的字符串? 【发布时间】:2015-04-26 08:38:49 【问题描述】:我目前正在构建一个 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;
提前致谢
【问题讨论】:
不确定您是否欢迎对设计提出批评,但如果您担心 XML 的大小超过字符串的最大长度,您必须想象应用程序的性能随着时间的推移会显着退化。牢记解析/内存使用情况,您很快就会遇到麻烦。我会考虑使用数据库,或者至少将 XML 拆分为多个文件。关于您的问题,这可能会提供一些见解***.com/questions/816142/… 是的,我当然欢迎批评。我是来学习的。我唯一的问题是我之前没有意识到这个问题,所以我构建了我的整个应用程序依赖于这个系统,因为它必须从文章中加载其他东西。非常感谢您的回答 :) 所以我认为最好的移动方式是为我的应用程序的第一个版本实施 Natixs 解决方案,然后开始使用其他版本的数据库。 【参考方案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);
【讨论】:
感谢您的回答!我会开始努力的:)以上是关于XmlSerializer 是不是会返回一个太长而不能成为 Java 字符串的字符串?的主要内容,如果未能解决你的问题,请参考以下文章