public string Comprimir(FileStream archivo, FileStream archivoGuardar) { StreamWriter documento = new StreamWriter(archivoGuardar); colaPrioridad = cola.insert(archivo); string codigoBinario = BynaryEncode(cola.arregloBytes, colaPrioridad); devolverASCII(codigoBinario); lineaArchivo = escribirArchivo(datosParaArchivo()); documento.WriteLine(lineaArchivo); documento.Close(); codigosBytePrefijo = new Dictionary <byte, string>(); cogdigosPrefijoByte = new Dictionary <string, byte>(); return(lineaArchivo); }
/// <summary> /// Este método recive un arreglo de bytes y por medio del algorítmo de Huffman /// comprime estos bytes a su correlativo en un prefijo de ceros y unos más peuqueño /// que el valor original. /// </summary> /// <param name="cadena">Arreglo de bytes, con el contenido del archivo, a ser comprimido</param> /// <returns> Retorna una cadena con el mensaje comprimido en ceros y unos </returns> public string BynaryEncode(List <byte> cadena, ColaED1 <NodoHuff <byte> > cola) { CrearArbol(cola); string resultado = ""; foreach (var item in cadena) { resultado += codigosBytePrefijo[item]; } /*int byteFaltante = resultado.Length % 8; * if (!(byteFaltante == 0)) * { * int caracteres = 8 - byteFaltante; * for (int i = caracteres; i > 0; i--) resultado += "0"; * }*/ return(resultado); }
private void CrearArbol(ColaED1 <NodoHuff <byte> > cola) { NodoHuff <byte> auxIzqu = new NodoHuff <byte>(); NodoHuff <byte> auxDer = new NodoHuff <byte>(); NodoHuff <byte> auxPadre = new NodoHuff <byte>(); try { auxDer = cola.Delete(); auxIzqu = cola.Delete(); //Esta validación o validar si el elemento de la cola auxDer es auxDer.FrePrio = 1 if (auxIzqu == null) { Raiz = auxDer; Raiz.Frecuencia = 1; GenerarPrefijos(); } else { auxPadre.Frecuencia = auxDer.Frecuencia + auxIzqu.Frecuencia; auxPadre.Derecho = auxDer; auxPadre.Inzquierdo = auxIzqu; cola.Insert(auxPadre.Frecuencia, auxPadre); CrearArbol(cola); } } catch (System.NullReferenceException ex) { Raiz = auxDer; Raiz.Frecuencia = 1; GenerarPrefijos(); } }