Leitura de arquivo texto muito lento

Olá Pessoal!

Estou com um problemão aqui!
Estou desenvolvendo um aplicativo para pocket que precisa carregar arquivos textos na memória.
O problema é que o programa está demorando aproximadamente 10 minutos pra carregar um arquivo de 1,5Mb.

Preciso de uma solução urgente pra isso.

Segue meu código abaixo:

    public void carregaArquivoMemoria(String caminhoArquivo) {
        String linha = "";
        Vector vetor = new Vector();
        String subString = "";
        int fimArquivo = 0;
        buffer = new byte[4096];
        try {
            is = getClass().getResourceAsStream(caminhoArquivo);
            while (true) {
                fimArquivo = is.read(buffer);
                if (fimArquivo == -1) {
                    break;
                } else {
                    for (int x = 0; x < buffer.length; x++) {
                        if ((((char) buffer[x] + "").equals("\r")) && (((char) buffer[x] + "").equals("\r"))) {
                            subString = linha.substring(36, 116);
                            linha = "";
                            vetor.addElement(subString);
                        } else {
                            linha = linha + (char) buffer[x];
                        }
                    }
                }
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (OutOfMemoryError oute) {
            oute.printStackTrace();
        } catch (Exception exc) {
            exc.printStackTrace();
        }
    }
 

Obrigada!

Olá, faz tempo que não mexo com CLDC então desculpe se eu falar alguma classe que não tem lá.

Parece que vc está querendo ler linha por linha e pegar um trecho de cada linha, certo?

Se existe BufferedReader no CLDC, use ele e o método readLine() dele.

Para concatenação de Strings use StringBuilder ou StringBuffer (se tiver eles, hehe)

Vc tem outra opção para usar no lugar desse Vector? Vector é bem lento, apesar de ser quase a única Collection no CLDC.
Vc pode usar um array normal se souber o tamanho do arquivo ou então utilizar o Javolution: www.javolution.org

Principalmente com StringBuilder e substituindo o Vector vc deve conseguir uma boa diferença.

Espero que ajude.

Gustavo

Nao tem StringBuilder, use StringBuffer em ME.
Primeira coisa. Qual a CPU do seu pocket? Qual a VM?
Qual o tamanho da heap do seu pocket?

Vc disse que quer ler um arquivo de 1,5mb rapido?
Nem qndo eu trabalhei com arquivos de 100k era rapido… inda + que vc ali deu subString = linha.substring e logo embaixo concatenou string com string.
Usa StringBuffer eh + rapido

Nao se usa while(true) qndo se quer fazer uma operacao demorada em celular, pq vc para a thread principal da aplicacao
Se usa
new Thread(
public void run()
{
// fazer tarefas
}).start();

Depois da uma olhada nesse site:

Técnicas para desempenho em I/O Java
http://www.inf.ufrgs.br/procpar/disc/inf01008/trabalhos/sem01-1/t2/PDPT2Claus/

Eu preciso desenvolver uma solução pra isso, pois tem um programa que foi desenvolvido há 10 anos e abre vários arquivos texto os carrega na memória e não leva nem um minuto…
Tem que existir alguma maneira…

Já andei vendo este site por esses dias, mas as classes e métodos que esse cara usa não estão presentes no J2ME…

:frowning:

Tipo performance depende de varios fatores. Por isso te perguntei o modelo…
Tem varios truques que eu fiz aqui e carrego arquivos de 1mb facil. Mas tb qndo coloco num Motorola V3 demora um dia…
Entao nao tem milagre em JME.

É um HP iPAQ1940.

O problema é que esse modelo abre arquivos bem mais rápido, só que usando um sistema desenvolvido há 10 anos.
:cry:

Vc esta usando a VM J9 ou a JBed?^
Alem disso o arquivo ta na flash ou ta no cartao SD?
Se no SD, qual a velo de gravacao e leitura dele?

[quote=eliangela]É um HP iPAQ1940.

O problema é que esse modelo abre arquivos bem mais rápido, só que usando um sistema desenvolvido há 10 anos.
:cry:

[/quote]

Ou seja, provavelmente foi usado Microsoft Embedded Visual C++ 2 ou coisa parecida. 10 anos atrás não havia programação em Java para PocketPC.

[quote=Sagatiba]Vc esta usando a VM J9 ou a JBed?^
Alem disso o arquivo ta na flash ou ta no cartao SD?
Se no SD, qual a velo de gravacao e leitura dele?[/quote]

Estou usando a VM J9. E o arquivo está na flash.

[quote=thingol]Ou seja, provavelmente foi usado Microsoft Embedded Visual C++ 2 ou coisa parecida. 10 anos atrás não havia programação em Java para PocketPC.
[/quote]

O sistema atual foi desenvolvido em C++.