1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Erro ao imprimir a frequência de cada byte em um arquivo.

Boa noite pessoal! Estou com um erro e não consigo encontrar. Na saída do programa é impresso a frequência de cada byte em um arquivo, mas notei que falta um dos bytes e não achei um solução. O código e uma imagem do console segue a seguir. Desde já agradeço.

Código:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopiaArquivos {

    final static long startTime = System.nanoTime();

    public static void main(String[] args) throws FileNotFoundException {

        if(args.length != 2){
              System.err.println("Informe apenas um argumento");
              System.err.println("java Leia <nome_de_arquivo_origem> "
                      + "<nome_de_arquivo_destino>");
              System.exit(0);
        }

        FileInputStream fin = new FileInputStream(args[0]);
        FileOutputStream fout = new FileOutputStream(args[1]);

        try {
            copiar(fin, fout);
        } catch (IOException e) {
            e.printStackTrace();
        }      
    }

    public static void copiar(FileInputStream fin, FileOutputStream fout) throws IOException {

        FileInputStream entrada = fin;
        FileOutputStream saida = fout;           

        // Transferindo bytes de entrada para saída
        byte[] buffer = new byte[512];
        int n = 0;
        int aux, contador = 1, i, j;        

        //Imprimindo os bytes que o arquivo contem
        System.out.println("\n\nConteúdo do arquivo: ");
        while ((n = entrada.read(buffer)) > 0) {        
            for (i = 0; i < n; i++) {
                //System.out.println("O byte #" + i + " é = " + buffer[i]);
            System.out.print((buffer[i] & 0xFF) + " ");
        }
        System.out.println("");
            saida.write(buffer, 0, n);

        /* Ordenando o vetor antes da contagem de repetições dos elementos */
         for(i = 0; i < n; i++){
                for(j = 0; j < n - 1; j++){
                    if(buffer[j] > buffer[j + 1]){
                        aux = buffer[j];
                        buffer[j] = buffer[j + 1];
                        buffer[j + 1] = (byte) aux;
                    }
                }            
            }

            /* Contando as repetições dos elementos inscritos no vetor */
        System.out.println("\n\nFrequência de bytes do arquivo: ");
            for(i = 0; i < n - 1; i++) {
                if (buffer[i] == buffer[i + 1]) {
                contador++;     
                }    
            else {    
                System.out.println("O byte " + (buffer[i] & 0xFF) + " aparece " 
                            + contador + " vezes");
                contador = 1;
                }
            }

        }        

        entrada.close();
        saida.close();   

        final long estimatedTime = System.nanoTime() - startTime;
        System.out.println("Tempo gasto: " + estimatedTime + " nanosegundos");
    }
}

Saída do programa:

https://www.filepicker.io/api/file/grKpjjPRoOF885gEMbkA

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java java8 arquivos ou faça a sua própria pergunta.