Página Inicial > Java Avançado > Exemplo rápido de como ganhar performance numa transferência de dados online

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)

Vanio Meurer Java Avançado , , ,

  1. Giselly
    23, setembro, 2009 em 15:37 | #1

    Ahhh agora sim, entendi tudo! =D
    hahaha
    Beijo baby ;*

  2. victor
    5, julho, 2010 em 13:34 | #2

    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

  1. Nenhum trackback ainda.