d. Descripción de los Algoritmos Desarrollados. - OscarAraya18/TEC-CE2103-MyInvincibleLibrary GitHub Wiki


loadImage(String ruta)

Este algoritmo lo que hace es tomar una imagen de la ruta especificada y partirla en tres partes del mismo tamaño (en pixeles)


saveImages()

El algoritmo se usa para guardar las partes de la imagen donde corresponda, segun el RAID5. Esto quiere decir que la paridad se debe guardar de manera distribuida por todos los discos. En este caso se usa un contador de la paridad para ver donde se tiene que guardar, si el contador es 4, la paridad se guarda en el disco 4 y las partes de la imagen se reparten entre los otros tres discos, si el contador es 3, la paridad se guarda en el disco 3 y las partes de la imagen se distribuyen entre los otros discos. Así se guardan sucesivamente hasta llegar al disco 1 para luego reiniciar el contador en 4.


bytesToimage(int id, int name, int piece)

Básicamente este algoritmo sirve para pasar un arreglo de bytes a una imagen.Para este algoritmo se recibe un id que funciona para saber que acción debe de realizar, el nombre de la imagen y la pieza que se está manejando (1, 2 ó 3)


addImage(int name)

Este algoritmo lo que hace es pegar las 3 partes de la imagen y generar la imagen completa a partir de estas. Lo que recibe es el nombre de la imagen a obtener


generateParity()

La funcionalidad de este algoritmo es crear el archivo de paridad entre las tres partes de la imagen y guardarlas en un archivo .txt Para esto utiliza el xor de java (^) entre cada uno de los bytes de las 3 imágenes, es decir, toma el primer byte de la imagen 1, el primer byte de la imagen 2, el primer byte de la imagen 3, les aplica el xor a estos y genera un nuevo byte de paridad. Así continua sucesivamente con cada uno de los bytes de las imágenes.


recuperarImg(int name, int id)

Este algoritmo lo que recibe es el nombre de la imagen y el número de pieza a restaurar asociado a esa imagen. Básicamente lo que hace es leer el archivo .txt con la información de paridad de la imagen por el nombre, luego dependiendo la pieza realiza el xor con las otras dos piezas y con la información de paridad. Es decir, si busco restaurar la pieza 1, debo realizar el xor entre la pieza 2, la pieza 3 y la información de paridad, generando la pieza que buscamos


BaseDeMetadata()

Constructor de la clase BaseDeMetadata. Este algoritmo se encarga de crear dos archivos .JSON, el primero para almacenar la información de la metadata de las imágenes (llamado BaseDeMetadata.json), y el segundo para hacer posible la funcionalidad del rollback y commit (llamado RecuperaciónPorCommit.json).

Su funcionamiento consiste en eliminar las bases de datos previas a la iteración actual, para limpiar los datos anteriores. Luego, crea dos bases de datos nuevas para almacenar la información de la metadata.


rollback()

Algoritmo encargado de recuperar el estado anterior en la MetadataDB. Lee cada una de las líneas de la base de datos RecuperaciónPorCommit.json, y dependiendo de un ID que indica si se debe eliminar, recuperar o reestablecer las modificaciones de la metadata de las imágenes.


CompresionHuffman()

Algoritmo encargado de comprimir las palabras con el método de Huffman. Primero, se cuenta la frecuencia de aparición de cada carácter dentro de la cadena a comprimir. Este dato se almacena junto con el carácter correspondiente en una estructura de datos denominada ElementosCompresion.

Luego, el algoritmo se encarga de crear un árbol binario que contiene todos los caracteres, iniciando desde el más utilizado hasta el menos utilizado. Se van generando los pisos superiores que tienen un estado "nulo", donde los hijos izquierdos tienen una ruta de 0, y los derechos una ruta de 1. El árbol se va completando hasta llegar a su raíz.

Finalmente, para cada palabra se genera un espacio en un array, que contiene la información requerida para descifrarla.