Exemplo rápido de como ganhar performance numa transferência de dados online
Boa noite coleguinhas,
hoje vim postar umas classes que fiz enquanto dava uma reestudada na manipulação de bits.
Caso você queira estudar também, segue o link do tutorial da Sun sobre Bitwise e Shift (http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html).
O que fiz foi um empacotador de duas variáveis ints para uma variável short. Essas classes seriam úteis por exemplo num jogo 2D online onde as coordenadas x e y são empacotadas para mais rápido trafegar na internet.
O empacotador:
package br.com.vaniomeurer.blog.tuning; /** * * <strong>Copyright © 2009 Vânio Meurer.</strong> * * EmpacotadorCoordenadas Classe que empacota dois ints de valor no máximo * 127 em um short. Bom tuning para transferência de dados pela internet por * exemplo. * * @author <a href="http://www.vaniomeurer.com.br">Vanio Meurer</a> * @since 21/09/2009 */ public class EmpacotadorCoordenadas { /** * Método que empacota os dois ints em um short. * * @param x * Parâmetro do eixo X com o valor máximo de 127. * @param y * Parâmetro do eixo Y com o valor máximo de 127. * @return um short com os dois int's empacotados. */ public static short empacotar(int x, int y) { System.out.println("Empacotando coordenadas..."); // Verificando tamanho máximo das coordenadas if (x > 127 || y > 127) { throw new IllegalArgumentException( "Valor(es) maior(es) que o permitido. (127)"); } short pacote = 0; // Setando X pacote = (short) ((x << 7) | pacote); // Setando Y pacote = (short) (y | pacote); return pacote; } /** * Método que desempacota um short e retorna um array de ints. * * @param pacote * o short que esta empacotando os dois ints. * @return Um array das posições desempacotadas. A posição 1 corresponde ao * eixo X e a 2 ao eixo Y. */ public static int[] desempacotar(short pacote) { System.out.println("Desempacotando coordenadas..."); int coordenadas[] = new int[2]; // Pegando Y (0x7F == 127) coordenadas[1] = pacote & 0x7F; // Pegando X coordenadas[0] = (pacote >> 7); return coordenadas; } }
Testando o empacotador:
package br.com.vaniomeurer.blog.tuning; /** * * <strong>Copyright © 2009 Vânio Stang Meurer.</strong> * * TestEmpacotadorCoordenadas Teste simples da classe * EmpacotadorCoordenadas. * * @author <a href="http://www.vaniomeurer.com.br">Vanio Meurer</a> * @since 21/09/2009 */ public class TestEmpacotadorCoordenadas { public static void main(String[] args) { // Criando duas coordenadas quaisquer. int x = 5, y = 10; // Empacotando coordenadas. short pacote = EmpacotadorCoordenadas.empacotar(x, y); System.out.println("Valor do pacote: " + pacote); // Limpando as coordenadas. x = 0; y = 0; // Desempacotando coordenadas. int[] coordenadas = EmpacotadorCoordenadas.desempacotar(pacote); x = coordenadas[0]; y = coordenadas[1]; System.out.println("Valor de X: " + x + "\nValor de Y: " + y); } }
Saída:
Empacotando coordenadas…
Valor do pacote: 650
Desempacotando coordenadas…
Valor de X: 5
Valor de Y: 10
No futuro caso haja interesse posso fazer um post tutorial de shift e manipulação de bits.
Até,
Vânio Meurer (vaninho)
Ahhh agora sim, entendi tudo! =D
hahaha
Beijo baby ;*
Ola Vanio, otimo tutorial, por acaso é o primeiro que dá um exemplo pratico sobre manipulacao de bits.
No futuro caso haja interesse posso fazer um post tutorial de shift e manipulação de bits…
cara, eu ficaria muuuito grato se vc fizesse isso! to tentando entender esses operadores mas tá muito dificil heheh.
Obrigado desde já
Victor