Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

carvalho2707

[android] buffered / out of memory

Mensagens Recomendadas

carvalho2707

boas, tenho um ficheiro txt com 10k linhas

quando estou a ler cada linha no txt da-me erro e diz out of memory.. e diz qql coisa do buffer..

o que posso fazer para conseguir ler um ficheiro com muitas linhas sem problemas destes?

obrigado winka.gif

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
carvalho2707

é no emulador...

is = am.open("BDFilmes.txt");
InputStreamReader inputStreamReader = new InputStreamReader(is);
BufferedReader br = new BufferedReader(inputStreamReader);
String line;
StringBuilder s = new StringBuilder();
while(line = br.readLine() != null){
s.append(line);
s.append("\n");
String nome = s.append(line).toString();
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KTachyon

Versão extendida:

Repara, tens um ciclo que faz append duas vezes à linha e depois a atribui a uma variável que não serve para nada. No fundo tu não estás a ler uma linha para uma String nome. Estás a ler cada linha e a adicionar ao StringBuilder (duas vezes) e depois a retirar para a String. No ciclo final terias a String com todo o ficheiro de 10k linhas em duplicado na String nome.

Agora, depende é do conteúdo do ficheiro, mas imagino que o facto de tu teres uma String nome dentro do ciclo que vai levando com cada vez mais informação e que não é imediatamente limpa pelo Garbage Collector... em principio é normal que te rebente a memória.

De qualquer forma, devias colocar cá o erro, porque "e diz qql coisa do buffer" não nos diz muito.

Versão resumida:

Tira a linha:

String nome = s.append(line).toString();


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KTachyon

Epah, isso não é propriamente uma dúvida para dispositivos móveis. O StringTokenizer tem uma função e o StringBuilder tem outra completamente distinta.

O StringTokenizer serve para separar uma String em "tokens". O StringBuilder serve para construir Strings.

Sem sabermos o que queres fazer, muito dificilmente alguém te pode dizer o que deves usar.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Nazgulled

Sem sabermos o que queres fazer, muito dificilmente alguém te pode dizer o que deves usar.

Isto e o facto de chegares aqui e dizer "tenho um problema ali que dá um erro qualquer" também não ajuda muito... Ninguém é bruxo neste fórum. Experimenta colocar aqui o stacktrace completo do erro (excepção suponho?) para ajudar a perceber o que se está a passar ao certo...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.