I'm downloading an image from my web server like this:
conn = url.openConnection();
conn.setDoOutput(true);
wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((resp = rd.readLine()) != null) {
downloadedImage += resp;
}
However it's extremely slow. Downloading a single 500kb file takes about 15 seconds. Is there a better way to download the image?
Incase it matters: The file formatted as x lines, 80 UTF-8 chars each. Keeping the line breaks isn't important.
Thanks
I guess the weakest link here is the network / server, but anyway, you could improve performance of the while
loop a little bit.
Using +=
basically creates a new StringBuilder
each time you invoke it. So string1 += string2
is the same thing as invoking string1 = new StringBuilder(string1).append(string2).toString();
Obviously, you would never do this in a loop that runns x times. So instead create one StringBuilder
before you start the loop, and call toString()
after finishing.
StringBuilder stringBuilder = new StringBuilder(downloadedImage);
while ((resp = rd.readLine()) != null) {
stringBuilder.append(resp);
}
downloadedImage = stringBuilder.toString();
If the loop doesn't run often, the performance improvement might not be as big, but since you're downloading an Image I suppose it runs quite a few times.