Otimizando conexão

6 respostas
P

Olá pessoal, eu estou fazendo uma conexão via socket para um servidor, mas o Palm leva quase 5 minutos para ler os 45 Kb que recebe, eu gostaria que vocês olhassem o código e talvez me dessem alguma dica de otimizar este código, lá vai:

try {
        sc = (SocketConnection)
           Connector.open("socket://xxx.xxx.x.xx:xxxx");
        is = sc.openInputStream();
        int c = is.read();
        int qtd_ast = 0;
        StringBuffer sb = new StringBuffer();
        while (true)
        {
            if (c == 42)
            {
                if (qtd_ast == 0)
                {
                    qtd_ast++;
                    sb.delete(0,sb.length()-1);
                    c = is.read();
                    continue;
                }
                else if (qtd_ast == 1)
                {
                    qtd_ast++;
                    sb.delete(0,sb.length()-1);
                    c = is.read();
                    continue;
                }
                else if (qtd_ast == 2)
                {
                    qtd_ast++;
                    sb.delete(0,sb.length()-1);
                    c = is.read();
                    continue;
                }
                else if (qtd_ast == 3)
                {
                    qtd_ast++;
                    sb.delete(0,sb.length()-1);
                    c = is.read();
                    continue;
                }
                else if (qtd_ast == 4)
                {
                    qtd_ast++;
                    sb.delete(0,sb.length()-1);
                    c = is.read();
                    continue;
                }
                else if (qtd_ast == 5)
                {
                    break;
                }
            }
            sb.append((char)c);
            c = is.read();
            gaProgress.setValue(gaProgress.getValue()+1);
        }
      } 
      catch(Exception e) {

      } finally {
         try {
           if(is != null) {
             is.close();
           }
           if(sc != null) {
             sc.close();
           }
         } catch(IOException e) {
           e.printStackTrace();
         }
      }

Aquele qtd_ast significaa quantidade de asteriscos porque o socket no lado servidor ler os dados de clientes, produtos, grupos, subgrupos etc e separa este arquivos por *...

6 Respostas

cv1

Qual a diferenca entre

if (qtd_ast == 0) { qtd_ast++; sb.delete(0,sb.length()-1); c = is.read(); continue; }

e…

else if (qtd_ast == 1) { qtd_ast++; sb.delete(0,sb.length()-1); c = is.read(); continue; }

!?

Copy-n-paste programming detected :smiley:

Remova o codigo duplicado de bobeira, so isso ja deve dar uma acelerada na coisa. Aproveite tambem pra dar uma procurada na API e ver se nao tem nenhum metodo melhor que o read() pra esse tipo de coisa. :wink:

P

a diferença está nos seguinte fato: ele vai ler até chegar ao primeiro *, quando ele chegar aí ele leu somente os clientes, incrementando a variável qtd_ast. Quando ele verificar que leu um * novamente e o qtd_ast estiver setado como 1 é sinal que ele já leu cliente e que agora ele leu produtos e assim por diante…

Eu já die uma olhada na API, ele tem um método do read() que joga tudo que ele lê em um byte[], mas eu tentei fazer isso, mas ele não lê todos os dados, quando ele lê o InputStream não deve ter recebido todos os dados, e não sie o momento exato de chegada de TODOS os dados.

P

Achei que tinha descobrido uma menira de acelerar a recepção dos dados, mas o tempo gasto foi quase idêntico, eu troquei o StringBuffer por um ByteArrayOutputStream…

wmitsuda

Ping:
Olá pessoal, eu estou fazendo uma conexão via socket para um servidor, mas o Palm leva quase 5 minutos para ler os 45 Kb que recebe, eu gostaria que vocês olhassem o código e talvez me dessem alguma dica de otimizar este código, lá vai:

Dê uma olhada nesse documento e nesse, na parte de redes.

Eu chutaria que é o fato de vc fazer leitura byte-a-byte. Some a isso a velocidade, o tempo de latência da rede e a quantidade (45K) e dados, e vc tem uma bomba nas mãos :slight_smile:

E outra: vc tá usando um StringBuffer como um buffer de bytes???

P

wmitsuda:
Eu chutaria que é o fato de vc fazer leitura byte-a-byte. Some a isso a velocidade, o tempo de latência da rede e a quantidade (45K) e dados, e vc tem uma bomba nas mãos :slight_smile:

E outra: vc tá usando um StringBuffer como um buffer de bytes???

readFully rulez !

dpolastri

E dae pessoal… blz?

Vocês tem algum tutorial de J2ME para palm?

Estou desenvolvendo um projeto de automação residencial, onde um palm irá enviar dados, arquivos para um micro ligado na internet e esse micro vai acionar equipamentos eletrônicos…

Se você tiver alguma coisa pra me ajudar começar desenvolver mande para mim por favor… da parte de instalação, Midp, kjava, SKD…

Valew!!

Criado 22 de março de 2005
Ultima resposta 7 de abr. de 2005
Respostas 6
Participantes 5