Class HuffmanCompressor
java.lang.Object
AEDs3.Compression.Compressors.HuffmanCompressor
- All Implemented Interfaces:
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.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static classClasse auxiliar para decodificação (árvore de Huffman simplificada).private static classClasse auxiliar representando um nó na árvore de Huffman (para compressão). -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static HuffmanCompressor.DecodeNodebuildDecodingTree(Map<Byte, String> codes) Reconstrói a árvore de decodificação de Huffman a partir da tabela de códigos.voidcompress(InputStream in, OutputStream out) Comprime os dados lidos de um InputStream utilizando o algoritmo de Huffman e os escreve no OutputStream.voiddecompress(InputStream in, OutputStream out) Descomprime os dados lidos do InputStream que foram comprimidos com Huffman e escreve o resultado no OutputStream.private static voidgenerateCodes(HuffmanCompressor.HuffmanNode node, String code, HashMap<Byte, String> codes) Método auxiliar recursivo para gerar a tabela de códigos de Huffman.
-
Constructor Details
-
HuffmanCompressor
public HuffmanCompressor()
-
-
Method Details
-
compress
Comprime os dados lidos de um InputStream utilizando o algoritmo de Huffman e os escreve no OutputStream.- Specified by:
compressin interfaceStreamCompressor- 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
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:
decompressin interfaceStreamCompressor- 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
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.
-