Leitura de Arquivo (desempenho)

2 respostas
S

Olá pessoal! Estou com problema de desempenho na leitura do meu arquivo. Ele possui aproximadamente 1.2Mb de dados, e cada caracter do arquivo é convertido para seu correspondente ascii, e depois para binário, e esse valor binário eh adicionado na String dados. Mas o desempenho está muito ruim. O programa leva muito tempo (muito tempo mesmo) para percorrer todo o arquivo. Segue o trecho importante do código:

FileInputStream arq;
DataInputStream in
String conteudo = ""; //armazena todo o conteúdo disponível no arquivo
int disponivel = 0; //armazena o número bytes do arquivo
String dados = ""; //recebe todo binários dos caracteres do arquivo

arq = new FileInputStream( "dados.txt" );
in = new DataInputStream( arq ); 
disponivel = in.available();	             
	        
if( in.available() != 0 ) {
     /* lê todo o conteúdo do arquivo, e armazena na string conteudo */
     conteudo = in.readLine();
}

//armazena os binários de cada caracter na String dados
for( int cont = 0; cont < disponivel; cont++ ) {	
    /* converte o caracter em ascci, em seguida para binário, e armazena */
    dados += Integer.toBinaryString( (int) conteudo.charAt( cont ) );
    dados += "\n";
}

textArea.setText( dados );
JOptionPane.showMessageDialog( null, resultado, "Dados", JOptionPane.INFORMATION_MESSAGE );
in.close();

Se alguém tiver alguma idéia para melhorar o tempo de leitura, por favor me ajude. Obridado pessoal!

2 Respostas

C

Use StringBuffer ao invés de String.
Cada vez que vc adiciona um caracter em String ele cria um novo objeto em memória. É a mesma coisa que vc desse outro new, o que degrada a performance.
Espero ter ajudado.

S

Obrigado Mônica, realmente o StringBuffer melhorou muito o desempenho do programa, mas ainda tenho um problema: testei o programa para ler um arquivo de aproximadamente 1.26Mb, mas ele não consegue chegar até o fim da leitura e retorna o erro String index out of range, o que não acontecia quando estava usando String. Alguém tem idéia do que pode estar acontecendo, e como eu posso resolver esse problema? Muito Obrigado!!!

Segue o trecho do código que foi alterado, usando StringBuffer:

for( int cont = 0; cont < disponivel; cont++ ) { /* converte o caracter em ascci, em seguida para binário, e armazena */ bufferDados.append( Integer.toBinaryString((int) conteudo.charAt(cont))); bufferDados.append ( "\n" ); }

Se alguém souber o que pode estar acontecendo, por favor me ajude. Agradeço desde já!

Criado 10 de maio de 2004
Ultima resposta 10 de mai. de 2004
Respostas 2
Participantes 2