有没有更快的方法将网页从网页下载到字符串?

cph*_*il5 5 url android download

我尝试过其他方法从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());
}
Run Code Online (Sandbox Code Playgroud)

Kru*_*lur 2

如果请求发送至同一服务器,请尝试保持连接打开。另外,尽量避免缓冲区中的重新分配,并一次性读取尽可能多的内容。


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());
}


  1. 设置 Keep-alive 标头(不确定您是否需要这个,在 J2SE 上它也是一个可配置属性)
  2. 分配缓冲区中“通常足够”的内容以避免重新分配。
  3. 一次读取多个字节

免责声明:这是在没有访问 Java 编译器的情况下“盲目”编写的。setRequestHeader 可能仅在 HttpURLConnection 上可用(需要强制转换),或者某些参数错误,但如果是这样,请随时编辑。