Я попробовал другие методы для загрузки информации с URL, но нуждался в более быстром. Я должен загрузить и проанализировать приблизительно 250 отдельных страниц и хотел бы, чтобы приложение не казалось смехотворно медленным. Это - код, который я в настоящее время использую для получения единственной страницы, любое понимание было бы большим.
try
{
URL myURL = new URL("http://www.google.com");
URLConnection ucon = myURL.openConnection();
InputStream inputStream = ucon.getInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
ByteArrayBuffer byteArrayBuffer = new ByteArrayBuffer(50);
int current = 0;
while ((current = bufferedInputStream.read()) != -1) {
byteArrayBuffer.append((byte) current);
}
tempString = new String(byteArrayBuffer.toByteArray());
}
catch (Exception e)
{
Log.i("Error",e.toString());
}
Старайтесь поддерживать соединение открытым, если запросы поступают на один и тот же сервер. Кроме того, старайтесь избегать перераспределения в буфере и прочитайте как можно больше за один раз.
const int APPROX_MAX_PAGE_SIZE = 300;
try
{
URL myURL = new URL("http://www.google.com");
URLConnection ucon = myURL.openConnection();
ucon.setRequestHeader("Connection", "keep-alive") // (1)
InputStream inputStream = ucon.getInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
ByteArrayBuffer byteArrayBuffer = new ByteArrayBuffer(APPROX_MAX_PAGE_SIZE); // (2)
int current = 0;
byte[] buf = new byte[APPROX_MAX_PAGE_SIZE];
int read;
do {
read = bufferedInputStream.read(buf, 0, buf.length); // (3)
if(read > 0) byteArrayBuffer.append(buf, 0, read);
} while (read >= 0);
tempString = new String(byteArrayBuffer.toByteArray());
}
catch (Exception e)
{
Log.i("Error",e.toString());
}
Заявление об ограничении ответственности: это было написано «вслепую» без доступа к компилятору Java. Может случиться так, что setRequestHeader доступен только в HttpURLConnection (требуется приведение) или что некоторые параметры неверны, но, пожалуйста, не стесняйтесь редактировать, если это так.
Используйте объединенный HTTP-клиент и попробуйте сделать 2 или 3 запроса одновременно. И попробуйте создать пул памяти, чтобы избежать выделения и остановки сборки мусора.
Почему вы не используете встроенные http компоненты apache?
HttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(uri);
HttpResponse response = httpClient.execute(request);
int status = response.getStatusLine().getStatusCode();
if (status != HttpStatus.SC_OK) {
ByteArrayOutputStream ostream = new ByteArrayOutputStream();
response.getEntity().writeTo(ostream);
}