Trabalhando com bytes

Galera, gostaria de saber como eu faço para trabalhar com bytes.

O que quero fazer é o seguinte: pegar tipos primitivos (int, short, etc) e convertê-los para bytes puros (byte[]), e após isso fazer o inverso, pegar esses array’s de bytes e recuperar o valor.

Como eu faço isso?

OBS.: o tipo/origem da stream que em que usarei esses dados é dispensável nesse caso, logo, usar um DataOutputStream no OutputStream não é uma opção.

Eu geralmente uso o ByteBuffer do pacote Java nio. É muito mais fácil trabalhar com ele e com os channels, ao invés de usar o método tradicional, por streams. Ele também já leva em consideração ordenação de bytes (little ou big endian).

Mas… pq vc não pode usar o DataInputStream e o DataOutputStream? Eles geralmente fazem esse trabalho sujo para vc. Se precisa mesmo fazer no braço, vc sempre pode recorrer a shifts. Por exemplo:

[code]int numero = 255;
byte bytes[4] = new byte[4];

for (int i = 0; i < 4; i++)
{
byte[4-i] = (byte)(numero & 0xFF);
numero >> 8;
}
[/code]

É que estou desenvolvendo um pequeno banco de dados para JavaME.

Algumas classes que encapsulam todo o tratamento puro de bytes dos RecordStore’s.

Quero aprender a mexer diretamente com bytes para não precisar criar muitos objetos (os OutputStream’s) durante os processamentos uma vez que estou partindo para a parte de indexação e autoincremento e reutilização de posições dentro da base de dados do dispositivo. É de suma importância que eu priorize a economia de memória.

Cara, tu podes me recomendar algum material sobre shifts? Essa manipulação totalmente sem objetos (???) de dados primitivos em bytes.

Valew

Tem muito material de C++ sobre o assunto:
http://www.eskimo.com/~scs/cclass/int/sx4ab.html
http://www.vipan.com/htdocs/bitwisehelp.html

Procure sobre bitwise operator ou shift operators.

Vai achar muito material.