Salve, Aqui vão uns comentários que podem ajudar com o EP11.
Leitura de dados
-
o
main()da classeMoveToFronté idêntica aomain()da classeHuffman. Veja o programaHuffman.javana página doalgs4ou doPF -
a leitura do o string da entrada padrão do
encode()da classeMoveToFrontpode ser feita de manaira indêntica ao métodocompress()da classeHuffman. Para testar, leia o string e guarde e armazena a referência para o string em uma variávelse depois façaBinaryStdOut.write(s);ou
for (int i = 0; i < s.length(); i++) BinaryStdOut.write(s.charAt(i));Faça apenas isso para verificar que se você está conseguindo ler da entrada padrão.
-
A saída do
encode()é um fluxo de bytes para a saída padrão. Assim, você pode usarBinaryStdOut.write(valor, 8); -
Para entender o que faz o método
encode()deMoveToFrontconsidere o arquivoaaaabaaa.txtcriado da seguinte maneira.% echo -n aaaabaaa > aaaabaaa.txt % more aaaabaaa.txt aaaabaaa % file aaaabaaa.txt aaaabaaa.txt: ASCII text, with no line terminators -
Veja a saída de
MoveToFrontpara esse arquivo.% java MoveToFront - < aaaabaaa.txt | java HexDump 8 61 00 00 00 62 01 00 00 64 bits
0x61, 61 em hexa, 97 em decimal, é o código para 'a'-
0x62, 62 em hexa, 98 em decimal, é o código para 'b' Um caractere é um valor entre 0 e 255. Não há distinção entre o símbolo gráfico e o valor que o representaWelcome to DrJava. Working directory is /home/coelho/Dropbox/mac0323/assignments/8puzze > 'a' == 97 true > 'a' == 0x61 true > 0x61 97 > 'b' == 98 true > 'b' == 0x62 true > 0x62 98 >
-
No nosso caso, o tamanho do alfabeto é 256 (de 0 a 255) que corresponde a ASCII estendido. Inicialmente,
MoveToFronttem um vetor digamos,codigodo tamanha do alfabeto tal quecodigo[i] == iAssim, inicialmente
codigo[0x61] == 'a' (0x61 == 97). Processamento do arquivoaaaabaaa.txtporencode()
Processamento do arquivo aaaabaaa.txt
Quando o primeiro caractere 'a' é lido o programa escreve para a saída padrão o índice da posição em que 'a' está, ou seja, 95 == 0x61`. Depois,'a'`` é movido para o ínício do vetor de código e o vetor passa a ser
codigo[0] == 97 == 'a'
codigo[1] == 0
codigo[2] == 1
[...]
codigo[97] == 96 !!!
codigo[98] == 98 == 'b' !!!
codigo[99] == 99 == 'c'
[...]
codigo[255] = 255
Quando o segundo caractere 'a' é lido o programa escreve para a saída padrão o índice da posição em que 'a' está, ou seja, 0 == 0x00 Depois, 'a' é movido para o ínício do vetor de código. No caso o vetor fica igual
Quando o terceiro caractere 'a' é lido o programa escreve para a saída padrão o índice da posição em que 'a' está, ou seja, 0 == 0x00 Depois, 'a' é movido para o ínício do vetor de código. No caso o vetor fica igual
Quando o quarto caractere 'a' é lido o programa escreve para a saída padrão o índice da posição em que 'a' está, ou seja, 0 == 0x00 Depois, 'a' é movido para o ínício do vetor de código. No caso o vetor fica igual
Quando o caractere 'b' é lido o programa escreve para a saída padrão o índice da posição em que 'b' está, ou seja, 98 == 0x62 Depois, 'b' é movido para o ínício do vetor de codigo e o vetor passa a ser
codigo[0] == 98 == 'b'
codigo[1] == 97 == 'a'
codigo[2] == 0
codigo[3] == 1
[...]
codigo[97] == 95
codigo[98] == 96 !!!
codigo[99] == 99 == 'c'!!!
[...]
codigo[255] == 255
Quando o próximo caractere 'a' é lido o programa escreve para a saída padrão o índice da posição em que 'a' está, ou seja, 1 == 0x01 Depois, 'a' é movido para o ínício do vetor de codigo e o vetor passa a ser
codigo[0] == 97 == 'a'
codigo[1] == 98 == 'b'
codigo[2] == 0
codigo[3] == 1
[...]
codigo[97] = 95
codigo[98] = 96 !!!
codigo[99] = 99 == 'c'!!!
[...]
Quando o proximo caractere 'a' é lido o programa escreve para a saída padrão o índice da posição em que 'a' está, ou seja, 0 == 0x00 Depois, 'a' é movido para o ínício do vetor de código. No caso o vetor fica igual
Quando o último caractere 'a' é lido o programa escreve para a saída padrão o índice da posição em que 'a' está, ou seja, 0 == 0x00 Depois, 'a' é movido para o ínício do vetor de código. No caso o vetor fica igual
Terminou o processamento de "aaaabaaa"
Veja a API para BinaryStdOut e BinaryStdIn em caso de dúvida.