有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java非常快速的URL检查

因此,我创建了一个安卓应用程序,需要快速检查远程服务器上是否存在文件,因为在应用程序可用之前,我必须测试约1000个链接

我当前调用了一个函数,如果URL有效,则返回该URL;如果无效,则返回null

public String CheckUrl(String url) {
  try {
    URL urll = new URL(url);
    HttpURLConnection huc = (HttpURLConnection) urll.openConnection();

    huc.setRequestMethod("GET");  //OR  huc.setRequestMethod ("HEAD");
    huc.connect();
    int code = huc.getResponseCode();
    System.out.println(code);

    if (code == 200) {
      return url;
    } else {
      return null;
    }
  } catch (Exception e) {
    return null;
  }
}     

我是这样用的:

for (Element episode : episodes) {
  globalEpisodeCounter++;
  localEpisodeCounter++;

  MLP_Episode currentEpisode = new MLP_Episode();

  Elements links = episode.getElementsByTag("a");
  Element linkObj = links.get(0);
  Element thumObj = linkObj.getElementsByTag("img").get(0);
  Element titleObj = linkObj.getElementsByTag("b").get(0);

  int notRealsead = episode.getElementsByClass("btn btn-sm btn-error").size();
  Boolean epReleased = false;
  if (notRealsead == 0) {
    epReleased = true;
  }

  currentEpisode.url = "https://www.newlunarrepublic.fr" + linkObj.attributes().get("href");
  currentEpisode.thumbUrl = "https://www.newlunarrepublic.fr" + thumObj.attributes().get("src");
  currentEpisode.title = titleObj.text();
  currentEpisode.released = epReleased;
  currentEpisode.id_local = localEpisodeCounter;
  currentEpisode.id_global = globalEpisodeCounter;
  currentEpisode.in_season_num = seasonCounter;

  if (epReleased) {
    currentEpisode.url_vo_1080p = CheckUrl(
        "---------/NLR-1080p-" + addZero(seasonCounter) + "x" + addZero(localEpisodeCounter) + ".webm");

  }

  epList.add(currentEpisode);
}                        

在搜索结束时,搜索线程调用一个函数来更新UI

但该功能的缺点是速度非常慢,每秒1-2个链接,在应用程序可用之前等待15分钟即可传输


共 (1) 个答案

  1. # 1 楼答案

    因此,答案是在单独的线程中运行检查:

    Thread thread = new Thread() {
        @Override
        public void run() {
            try {
                currentEpisode.url_vo_1080p = CheckUrl("      /NLR-1080p-"+addZero(seasonCounter2)+"x"+addZero(localEpisodeCounter2)+".webm");
            }
            catch (Exception e) {}
        }
    };
    
    thread.start();