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