Leitura de Arquivo (desempenho)

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!

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.

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á!