public static boolean igual(BufferedImage nueva, ItemDeCache vieja) {
   String nuevaImagen = hash(nueva);
   escribir("nueva: " + nuevaImagen);
   String viejaImagen = vieja.getHash();
   escribir("vieja: " + viejaImagen);
   if (nuevaImagen.equals(viejaImagen)) {
     return true;
   } else {
     return false;
   }
 }
  public static void main(String[] args) {
    escribir("********* Programa Empezado *********");
    Scanner scan = new Scanner(System.in);
    Cache cache = new Cache();
    System.out.println("tamaño de cache (n elementos):");
    cache.setTamañoDeCache(Integer.parseInt(scan.next()));
    escribir("Tamaño de cache definida: " + cache.getTamañoDeCache());
    int alg = algoritmoReemplazo(scan);

    while (true) {
      System.out.println(
          "Opciones:\n1) Accesar pagina\t2) Ver cache\t3) Limpiar Cache\t4) Algoritmo de Reemplazo\t5) Salir");
      int opcion = Integer.parseInt(scan.next());
      switch (opcion) {
          // Accesar Pagina
        case 1:
          if (alg == 0) {
            opcion = 4;
            break;
          }
          // Elegir pagina y crear directorios apropiados
          escribir("Accesar Pagina (formato ejemplo 'reddit.com':");
          System.out.println(
              "URL: \nb) bernardobc.github.io\tg) google.com\tn) nacion.com\tc) cancelar");
          String s = scan.next();
          if (s.equals("b")) {
            s = "bernardobc.github.io";
          } else if (s.equals("g")) {
            s = "google.com";
          } else if (s.equals("n")) {
            s = "nacion.com";
          } else if (s.equals("c")) {
            break;
          }
          String urlInput = s;
          String url = "http://" + urlInput;
          System.out.println("" + urlInput);
          escribir("Direccion: " + url);
          String directory = System.getProperty("user.dir") + "/descarga/" + urlInput + "/";
          // url = "http://github.com/bernardobc";
          File outputfolder = new File(System.getProperty("user.dir") + "/descarga/" + urlInput);
          if (!outputfolder.exists()) {
            mkdir(urlInput);
            escribir("Directorio creado");
          } else {
            escribir("Directorio encontrado");
          }

          // Crear Connection, descargar y parsear html, descargar imagenes
          HttpConnection httpConnect = new HttpConnection(url);
          String html = httpConnect.GET();
          ArrayList<String> parsed = parser(html + "\n\n");
          ArrayList<BufferedImage> images = new ArrayList<BufferedImage>();
          for (int i = 0; i < parsed.size(); i++) {
            escribir("imagen encontrada en pagina web: " + parsed.get(i));
            images.add(httpConnect.getImage(parsed.get(i)));
            escribir("buscando imagen en cache");

            // Buscar en Cache
            ItemDeCache imagen = cache.buscarImagen(parsed.get(i));
            if (imagen != null) {
              escribir("imagen encontrada en cache");

              // if LRU
              if (alg == 2) {
                // LRU - tiempo de acceso actualizado
                imagen.setHoraUltimoAccesso(ahora());
              }

              escribir("comparando...");
              if (igual(images.get(i), imagen)) {
                escribir("las imagenes son iguales.");
                cache.sumarVisita(parsed.get(i));
              } else {
                escribir("las imagenes son diferentes");
              }
            } else {
              escribir("imagen no econtrada en cache");
              if (cache.tieneEspacio()) {
                escribir("cache tiene espacio libre. agregando imagen a cache");
                cache.agregar(parsed.get(i), images.get(i), urlInput);
              } else {
                // Algoritmo de Reemplazo
                if (alg == 1) {
                  escribir("Algoritmo FIFO empezando");
                  FIFO(parsed.get(i), images.get(i), urlInput, cache);
                } else if (alg == 2) {
                  escribir("Algoritmo LRU empezando");
                  LRU(parsed.get(i), images.get(i), urlInput, cache);
                } else if (alg == 3) {
                  escribir("Algoritmo RR empezando");
                  RandomReplacement(parsed.get(i), images.get(i), urlInput, cache);
                } else if (alg == 4) {
                  escribir("Algoritmo MRU empezando");
                  MRU(parsed.get(i), images.get(i), urlInput, cache);
                } else if (alg == 5) {
                  escribir("Algoritmo LFU empezando");
                  LFU(parsed.get(i), images.get(i), urlInput, cache);
                }
              }
              escribir("buscando imagen en \"descarga\"");
              if (parsed.get(i).contains("//")) {
                parsed.set(i, parsed.get(i).substring(parsed.get(i).indexOf("//") + 1));
              }
              File outputfile = new File(directory + parsed.get(i));
              if (outputfile.exists()) {
                escribir("imagen encontrada en \"descarca\"");
                BufferedImage imagenGuardada = null;
                try {
                  imagenGuardada = ImageIO.read(outputfile);
                } catch (Exception e) {
                  escribir("Imagen fallo en cargar: " + e);
                }
                escribir("comparando hash");
                if (!hash(images.get(i)).equals(hash(imagenGuardada))) {
                  escribir("hash no es igual. Escribiendo en \"descarga\"");
                  try {
                    if (parsed.get(i).contains("jpg")) {
                      ImageIO.write(images.get(i), "jpg", outputfile);
                    } else if (parsed.get(i).contains("png")) {
                      ImageIO.write(images.get(i), "png", outputfile);
                    } else if (parsed.get(i).contains("gif")) {
                      ImageIO.write(images.get(i), "gif", outputfile);
                    }
                  } catch (Exception e) {
                    System.out.println(e);
                  }
                }
              } else {
                try {
                  escribir("imagen no encontrada en descarga");
                  outputfile.getParentFile().mkdirs();
                  if (parsed.get(i).contains("jpg")) {
                    ImageIO.write(images.get(i), "jpg", outputfile);
                  } else if (parsed.get(i).contains("png")) {
                    ImageIO.write(images.get(i), "png", outputfile);
                  } else if (parsed.get(i).contains("gif")) {
                    ImageIO.write(images.get(i), "gif", outputfile);
                  }
                  escribir("imagen guardada en " + outputfile.toString());

                } catch (Exception e) {
                  System.out.println(e);
                }
              }
            }
          }
          break;
          // ver cache
        case 2:
          escribir("Ver Cache\n");
          System.out.println(cache.imprimir());
          break;
          // limpiar cache
        case 3:
          escribir("Limpiar Cache");
          cache.limpiarCache();
          break;
          // salir
        case 4:
          alg = algoritmoReemplazo(scan);
          break;
        case 5:
          escribir("Programa Terminado");
          System.exit(0);
          break;
        default:
          break;
      }
    }
  }