gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:59:41 25 4
gpt4 key购买 nike

我尝试过其他方法从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com