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
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!
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.
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:
Agrupar booleans num único byte, através de máscaras de bits;
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);
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”.
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.