Class HuffmanCompressor

java.lang.Object
AEDs3.Compression.Compressors.HuffmanCompressor
All Implemented Interfaces:
StreamCompressor

public class HuffmanCompressor extends Object implements StreamCompressor
Classe responsável pela compressão e descompressão de dados utilizando o algoritmo de Huffman. Nesta versão, os métodos compress e decompress operam sobre streams, lendo e escrevendo bits de forma incremental para minimizar o uso de memória RAM.
  • Constructor Details

    • HuffmanCompressor

      public HuffmanCompressor()
  • Method Details

    • compress

      public void compress(InputStream in, OutputStream out) throws IOException
      Comprime os dados lidos de um InputStream utilizando o algoritmo de Huffman e os escreve no OutputStream.
      Specified by:
      compress in interface StreamCompressor
      Parameters:
      in - Stream de entrada com os dados originais.
      out - Stream de saída onde os dados comprimidos serão escritos.
      Throws:
      IOException - Se ocorrer um erro de I/O.
    • decompress

      public void decompress(InputStream in, OutputStream out) throws IOException
      Descomprime os dados lidos do InputStream que foram comprimidos com Huffman e escreve o resultado no OutputStream. O método lê o header (mapa de códigos e total de bits codificados) e reconstrói a árvore de Huffman para proceder à decodificação bit a bit.
      Specified by:
      decompress in interface StreamCompressor
      Parameters:
      in - Stream de entrada com os dados comprimidos.
      out - Stream de saída onde os dados descomprimidos serão escritos.
      Throws:
      IOException - Se ocorrer um erro de I/O.
    • generateCodes

      private static void generateCodes(HuffmanCompressor.HuffmanNode node, String code, HashMap<Byte,String> codes)
      Método auxiliar recursivo para gerar a tabela de códigos de Huffman.
      Parameters:
      node - Nó atual na árvore de Huffman.
      code - Código acumulado até o momento.
      codes - Mapa que armazena os códigos resultantes.
    • buildDecodingTree

      private static HuffmanCompressor.DecodeNode buildDecodingTree(Map<Byte,String> codes)
      Reconstrói a árvore de decodificação de Huffman a partir da tabela de códigos.
      Parameters:
      codes - Tabela de códigos (Map de byte para String).
      Returns:
      A raiz da árvore de decodificação.