Я пытаюсь преобразовать большой поток (4 МБ) в строку, которую я в конечном итоге преобразую в массив JSON.
когда размер потока небольшой (в КБ), все работает нормально, в ту минуту, когда он начинает обрабатывать поток 4 МБ, у него заканчивается память
ниже то, что я использую для преобразования потока в строку, я пробовал почти все, и я подозреваю, что проблема связана с циклом while. может кто-нибудь помочь?
public String convertStreamToString(InputStream is)
throws IOException {
if (is != null) {
Writer writer = new StringWriter();
char[] buffer = new char[1024];
try
{
Reader reader = new BufferedReader(
new InputStreamReader(is, "UTF-8"));
int n;
while ((n = reader.read(buffer)) != -1)
{
writer.write(buffer, 0, n);
}
}
finally
{
is.close();
}
return writer.toString();
} else {
return "";
}
}
Обновление: хорошо, это то, чего я достиг на данный момент, я на правильном пути? Я думаю, что я близок ... не уверен, что еще я могу закрыть или сбросить, чтобы восстановить память ..
public String convertStreamToString(InputStream is)
throws IOException {
String encoding = "UTF-8";
int maxlines = 2000;
StringWriter sWriter = new StringWriter(7168);
BufferedWriter writer = new BufferedWriter(sWriter);
BufferedReader reader = null;
if (is == null) {
return "";
} else {
try {
int count = 0;
reader = new BufferedReader(new InputStreamReader(is, encoding));
for (String line; (line = reader.readLine()) != null;) {
if (count++ % maxlines == 0) {
sWriter.close();
// not sure what else to close or flush here to regain memory
//Log.v("Max Lines Reached", "Max Lines Reached");;
}
writer.write(line);
}
Log.v("Finished Loop", "Looping over");
} finally {
is.close();
writer.close();
}
return writer.toString();
}
}
if
в начале?if (is == null) return "";
Также попробуйте использовать Jackson: у него есть потоковый API для преобразования входных потоков в JSON. - person fge   schedule 22.12.2012-Xmx
, либо... не загружать все это в память. - person Brian Roach   schedule 22.12.2012