2015-02-24 1 views
2

В настоящее время я создаю приложение для Android и решил использовать Xml-реализацию, а не базу данных для хранения данных. Я загружаю xml-файл в список при запуске приложения, и когда я хочу его сохранить, я отформатирую его в xml с помощью XmlSerializer, который затем выводит на StringWriter. Затем я вызываю .toString() в объекте StringWriter и записываю эту строку обратно в файл.Может случиться так, что XmlSerializer возвращает строку, которая слишком длинна, чтобы быть строкой в ​​Java?

Я заметил, однако, что приложения xml-файлов растут довольно быстро и задаются вопросом, что произойдет, если длина превысит максимальную длину строки. Есть ли способ получить массив строк из StringWriter? Вот мой метод Serializer.

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

Не уверен, что если бы вы приветствовать критику по дизайну, но если вы беспокоитесь о размере XML, превышающей максимальную длину строки, вы должны представить себе, что производительность приложения в течение долгого времени значительно ухудшится. Имея в виду синтаксический анализ/использование памяти, вы быстро столкнетесь с проблемами. Я бы подумал об использовании базы данных или, по крайней мере, разделил XML на несколько файлов. Что касается вашего вопроса, это может дать некоторое понимание http://stackoverflow.com/questions/816142/strings-maximum-length-in-java-calling-length-method –

+0

Да, конечно, я приветствую критику. Я здесь, чтобы учиться. Моя единственная проблема в том, что я не знал об этой проблеме раньше, поэтому я построил все свое приложение, опираясь на эту систему, потому что он должен загружать другие вещи в сторону от статей. Большое спасибо за ваш ответ :) Так что я думаю, что лучший способ переместить - это реализовать решение Natixs для первой версии моего приложения, а затем начать работу с базой данных для других версий. – Scottyers

ответ

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); 
     } 
    } 
} 
+0

Спасибо за ваш ответ! Я начну работать над этим :) – Scottyers

Смежные вопросы