Stream em arquivos grandes com java [RESOLVIDO]

1. Stream em arquivos grandes com java [RESOLVIDO]

José Cleydson Ferreira da Silva
cleysinhonv

(usa Ubuntu)

Enviado em 23/12/2014 - 13:17h

Olá pessoal,

Estou fazendo um stream em um arquivo com java. O arquivo tem aproximadamente 1GB e 12 milhões de linhas. O algoritmo que fiz esta extremamente lento. Gostaria de uma sugestão de como posso fazer essa implementação para que eu consiga maior rapidez e eficiência para fazer a leitura completa desse arquivo.

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;

/* Outros códigos */

...

String line;
String[] key = null;
String str = "";
File file = new File(f);

LineIterator it;
it = FileUtils.lineIterator(file);

try {
while (it.hasNext()) {
line = it.nextLine();
// do something with line
if (line.contains(">")) {
if (key != null) {
fasta.put(key[0], str);
str = "";
}
key = line.split("\t");
keys.add(key[0]);
System.out.println(key[0]);
} else {
str += line;
}
}
}finally {
LineIterator.closeQuietly(it);
}


Grato ;)


  


2. MELHOR RESPOSTA

Thiago Henrique Hüpner
Thihup

(usa Linux Mint)

Enviado em 23/12/2014 - 17:42h

Faça algo assim :


public class Test {

public static void main(String args[]) {
String s = "Primeira Frase";
s = s.concat(" e sua continuação);
System.out.println(s);
}
}


Aproposito , coloque seu código entre ["code"]["/code"](sem aspas

Veja este link : http://www.tutorialspoint.com/java/java_string_concat.htm

E este :

http://www.devmedia.com.br/diferencas-entre-string-stringbuilder-e-stringbuffer-em-java/29865

Espero ter ajudado

[]'s

T+

3. concatenação de string

José Cleydson Ferreira da Silva
cleysinhonv

(usa Ubuntu)

Enviado em 23/12/2014 - 15:57h

Descobri que a não eficiência se dá pela concatenação das strings.

str += line;

Alguma sugestão para resolver concatenação de string?


4. Re: Stream em arquivos grandes com java [RESOLVIDO]

Paulo Dias
p4ulodi4s

(usa XUbuntu)

Enviado em 23/12/2014 - 16:30h

Utilize a classe StringBuilder


5. Re: Stream em arquivos grandes com java [RESOLVIDO]

Paulo Dias
p4ulodi4s

(usa XUbuntu)

Enviado em 23/12/2014 - 17:55h

Usar o metodo concat da classe string não vai oferecer mais performace.

O operador + é apenas um açucar sintatico para esse metodo.

Como o link que você passou informa, string são imutaveis.





6. Re: Stream em arquivos grandes com java [RESOLVIDO]

José Cleydson Ferreira da Silva
cleysinhonv

(usa Ubuntu)

Enviado em 23/12/2014 - 18:04h

De fato operador + é a forma mais ineficiente, o cancat tambem pode ter algumas semelhanças. Vou fazer um teste com StringBuilder e StringBuffer.


7. Fechar o tópico

José Cleydson Ferreira da Silva
cleysinhonv

(usa Ubuntu)

Enviado em 23/12/2014 - 18:50h


Obrigado Paulo Dias, Thiago Henrique Hüpner.

O problema está resolvido. O Link foi util, a implementação está ok. Percebo que a classe String é um tiro no pé. Eu fazia em torno de 5.000.000 milhẽes de concatenações na mesma string, logo muitos objetos foram criados em memoria. Trabalhar com arquivos de DNA não é brincadeira não, tenho arquivos com 5GB.

Grato, se precisarem disponham-se!







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts