android - 有没有更快的方法从网上下载一个页面到一个字符串?

标签 android url 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());
}

最佳答案

如果请求发往同一台服务器,请尝试保持连接打开。此外,尽量避免在缓冲区中重新分配,并尽可能一次读取。


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 header (不确定您是否需要这个,在 J2SE 上它也是一个可配置的属性)
  2. 分配缓冲区中“通常足够”的内容以避免重新分配。
  3. 一次读取多个字节

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

关于android - 有没有更快的方法从网上下载一个页面到一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3051032/

相关文章:

php - 如何检查URL首字母是否小于G?

url - Thymeleaf URL 构建

PHP限制访问,只能提交后下载

java - 通知声音无穷无尽,永不停息

javascript - Rails 中的基本 API

android - 当变量不为空时,自定义适配器的 getview 抛出 NullPointerException

php - 使用 php 创建和下载 zip 文件

android - 无法使用 LibGDX Net 在 Android 上下载 100mb 文件

Android Studio 更新卡住清理?

android - 在android中切换通知栏