Korzystam z biblioteki odgzipowujacej pobrane dane z Internetu tinyline gzip (http://www.tinyline.com). Clien side wyglada tak:
private InputStream getInputStream(HttpConnection conn) throws IOException {
String xmlstring = new String();
if (HttpConnection.HTTP_OK == conn.getResponseCode()) {
InputStream is = conn.openInputStream();
final GZIPInputStream gzipis = new GZIPInputStream(is);
while (gzipis.available() != 0) {
xmlstring += (char)gzipis.read();
}
}
return new ByteArrayInputStream(xmlstring.getBytes());
}
public synchronized void parse() throws IOException {
Reader reader = new InputStreamReader(getInputStream(conn), "utf-8");
XmlParser parser = new XmlParser(reader);
ParseEvent pe = null;
// other stuff...
}
Problem polega na tym że zgzipowane pliki xml jakie pobieram sa b. duza, okolo 100kb-200kb. Trzymanie odgzipowanej tresci w jednej zmiennej string powoduje przepelnienie stosu i brak pamieci.
OutOfMemoryException :)
Nastepnie jak widac w kodzie probuje z tego zrobic InputStream aby parser kxml pull parsingiem mogl to przeparsowac. Niestety do tego momentu aplikacja sie wiesza przez przepelnienie stosu :|
da sie jakos przekazywac moze te bajty od razu z GZIP do kxml aby nie trzymac calego dokumentu w pamieci?