Coisa feia

Vou postar uma coisa muito feia, muito feia!
preciso melhorar este código, pq está mto lento…

  try{
            
               for(int i=0; i<resultado.length; i++){
                         
                  for(int p =0; p<camposResultado.length; p++){
                                                  
                  //System.out.println(resultado[i][p] + " resultadoo " + i + " " +p);
                     listaFilha.add (resultado[i][p]);
                  
                  
                  }
               
               //System.out.println(listaFilha);
                  listaMae.add(listaFilha);
                  listaFilha = new ArrayList<String>();
               }
            
                     
            }
                catch(Exception e){System.out.println("Não foi possível popular"); e.printStackTrace();}

É o seguinte: resultado é uma string[][], camposResultado uma string[]. O que faço é uma tradução para arraylist, passando por cada linha, no primeiro for (i), depois por cada coluna §. Isso é uma capiauzisse q num tem tamanho.

Creio q o melhor seria fazer esse resultado já chegar em arraylist ou de preferencia uma hash. aTé pq depois fico reconvertendo os tipos, de string para date, int, double… barberagem total huahauhauhuahu

Mas agora vem o assassinato da linguagem guiada a objeto, esse resultado chega de um metodo q faz o seguinte:

 Resultado = new String[ultimaLinha][tamanhoResultado];
           int p = 0;
            while(rs.next()){
               for(int i=0; i<camposResultado.length; i++){
               
                  Resultado[(rs.getRow())-1][i]= rs.getString(camposResultado[i]); 
                  
                   
               }
               
            }

hehehehehehe, pode xingar… o q seria melhor? tem como passa o resultset inteiro de uma só vez, pruma hash ou prum arraylist bidimensional sem corrrer linha a linha, coluna a coluna? sei q tem, mas

Bom dia.

Eu simplesmente não entendi nada e não faço a menor ideia do que você quer e/ou precisa.
Altere este tópico demonstrando a sua real dúvida.

Qual a sua dúvida e necessidade?
Abraços.

Não fique chamando seu código de ruim. Todos os códigos sempre tem algo a melhorar …

Transforme seu ResultSet em uma lista de objetos de negócio o mais rapidamente possível.

ViniGodoy,

Creio q compreendi o q disse, O problema é q rodo isso num servidor, e transfiro os dados pela internet, numa rede MUITO lenta… Minha prioridade é transferir o menor numero de bytes possível. Se eu transformar num objeto memso, precisarei serializar, o que exige mais capacidade de transferencia. Além disso, eu precisaria transferir atributos não necessários num determinado momento, julgando-se que precisarei padronizar o objeto no servidor e no cliente, embora isso seja contornável… Então envio apenas os dados mesmo, e transformo em objeto no cliente.

Também acho q o melhor seria isso, mas no servidor, acho difícil. Mas vc sempre tem uns argmentos legais ae, é só mandar!

Então use alguma técnica de compactação e defina um protocolo para deserializar do outro lado.

E do outro lado, transforme em uma lista de objetos conforme a dica do ViniGodoy.

Transformar tudo em String vai fazer com que números (que ocupam no máximo 8 bytes) ocupem 2 bytes por dígito. Também vai fazer com que booleans, que podem ser comprimidos em menos de 1 byte, ocupem 2 bytes.

Se você tem restrições tão sérias de banda, o ideal é fazer você mesmo a serialização, usando um protocolo enxuto:
http://www.guj.com.br/posts/list/136538.java#735860

Como vc faz a transmissão desses dados?

por socket, tal como no link. Beleza, vou transformar num objeto diretão. Q forma de compactação eu poderia utilizar?

O que digo como compactação é por exemplo organizar sua estrutura em um array de chars ou bytes de um modo que do outro lado voce saiba o que cada campo significa. Depois no outro lado voce monta o objeto de acordo com isso.

Primeiro é importante definir bem o protocolo. Se você criar um protocolo binário, praticamente não precisará de compactação.

Algumas técnicas podem poupar alguns bytes:

  1. Agrupar booleans num único byte, através de máscaras de bits;
  2. Utilizar na rede apenas o número de bytes necessário para representar os valores guardados por inteiros (geralmente, variáveis int ou long suportam um número muito maior do que seria necessário se você fosse econômico);
  3. Ter estruturas especiais para transferências de listas, que evitem overhead objeto-a-objeto.

Daria para usar a biblioteca JZlib do pessoal do JCraft para fazer compactação de dados, bastando usar as classes “ZOutputStream” e “ZInputStream” com o parâmetro “flush_mode” como “Z_SYNC_FLUSH” ou “Z_PARTIAL_FLUSH”.

Inté.

O q estou usando é objetcoutput/imput… o protocolo é bem legalzinho, funciona ha um bom tempo.
o q seria um overhead objeto-a-objeto? uma duplicação??? num achei no google.