Private
Public Access
1
0

Change out all-in-one deserialization process with object-by-object method to save memory. Still not enough. Looks like I'll need to send each object right into the DB instead of into a list.

This commit is contained in:
Kevin Whitaker
2015-11-20 10:45:16 -05:00
parent 586dcbf8a4
commit 3dfb0b592b

View File

@@ -6,9 +6,13 @@ import com.magnatune.eyecreate.companionformagnatune.model.xml.Track;
import com.squareup.okhttp.ResponseBody; import com.squareup.okhttp.ResponseBody;
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.basic.DateConverter; import com.thoughtworks.xstream.converters.basic.DateConverter;
import com.thoughtworks.xstream.io.xml.Xpp3Driver; import com.thoughtworks.xstream.io.xml.KXml2Driver;
import java.io.IOException; import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.OptionalDataException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.GZIPInputStream; import java.util.zip.GZIPInputStream;
import retrofit.Converter; import retrofit.Converter;
@@ -17,18 +21,26 @@ public class MagnatuneAlbumsConverter implements Converter<ResponseBody,AlbumRes
@Override @Override
public AlbumResponse convert(ResponseBody value) throws IOException { public AlbumResponse convert(ResponseBody value) throws IOException {
GZIPInputStream compressedStream = new GZIPInputStream(value.byteStream()); GZIPInputStream compressedStream = new GZIPInputStream(value.byteStream());
XStream parser = new XStream(new Xpp3Driver()); XStream parser = new XStream(new KXml2Driver());
parser.processAnnotations(Album.class); parser.processAnnotations(Album.class);
parser.processAnnotations(Track.class); parser.processAnnotations(Track.class);
parser.processAnnotations(AlbumResponse.class); parser.processAnnotations(AlbumResponse.class);
parser.registerConverter(new DateConverter("yyyy-MM-dd",new String[]{})); parser.registerConverter(new DateConverter("yyyy-MM-dd",new String[]{}));
parser.ignoreUnknownElements(); parser.ignoreUnknownElements();
AlbumResponse conversion = null; ObjectInputStream objectStream = parser.createObjectInputStream(compressedStream);
boolean processingDone = false;
List<Album> albums = new ArrayList<>();
while(!processingDone) {
try { try {
conversion = (AlbumResponse) parser.fromXML(compressedStream); albums.add((Album) objectStream.readObject());
} catch (Exception e) { } catch(OptionalDataException e) {
processingDone = true;
} catch (ClassNotFoundException e) {
e.printStackTrace(); e.printStackTrace();
} }
return conversion; }
AlbumResponse response = new AlbumResponse();
response.albums = albums;
return response;
} }
} }