Capturar os bytes de uma classe?

Pessoal preciso capturar os bytes de uma classe, mas não desejo gerar um aquivo para isto, sendo assim qual as minhas opções?

Ex: Criei uma classe CryptoTest como faço para capturar os bytes dela sem ter que serielizala?

Alguém me disse que eu teria que extender a InputStream, ai aparece outra dúvida como implementar o método abstrato read()?

Desde já valeu a forçaaaaaaaaaaa.

Você quer os dados de um objeto dessa classe, ou você quer os bytecodes (programa executável) da classe?

Se for o primeiro caso, basta serializar o objeto encapsulando um ObjectOutputStream em um ByteArrayOutputStream.

Se for o segundo caso, procure por ASM.

Thiagol,

sim quero capturar os bytes do Objeto que eu estanciar, mas não serializando ele! Se eu não me engano se eu serializar ele e encapsular em um ObjectOutputStream vou gerar um arquivo (o que preciso evitar)!

O intuíto é qual quero transmitir uma classe simples para um celular por ex: ImageEvent, nesta classe só pode conter recusrsos simples pois J2ME não aceita serialização!!!

Por isto preciso capturar os bytes do objeto sem serializar!!

Ah, entendi. JavaME não tem esse conceito; você provavelmente vai ter de fazer as coisas “no braço”, usando ByteArrayOutputStream / ByteArrayInputStream e DataInputStream / DataOutputStream. Vou dar mais ou menos um exemplo.

class Pessoa {
public String nome; public int idade;
}

class Exemplo {
    byte[] codificaPessoa (Pessoa p) throws Exception {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream (baos);
        dos.writeUTF (p.nome); dos.writeInt (idade);
        dos.close();
        return baos.toByteArray();
    }
    Pessoa decodificaPessoa (byte[] bytes) throws Exception {
        ByteArrayInputStream bais = new ByteArrayInputStream (bytes);
        DataInputStream dis = new DataInputStream (bais);
        Pessoa p = new Pessoa();
        p.nome = dis.readUTF(); p.idade = dis.readInt();
        dis.close();
        return p;
    }
}

Vou mover isto para “Java Micro Edition”, para que evitem dar sugestões que não funcionam em JavaME.

thingol,

cara acho que é por ai, agora digamos que minha classe contenha os seguintes atributos.

public class ImageTest
{
private byte[]image;
private long date;
private int precision;

public ImageTest decodificar(byte[] byte)
{
ByteArrayInputStream in = new ByteArrayInputStream(byte);
DataInputStream input = new DataInputStream(in);

  long date = input.readLong();
  int precision = imput.readInt();
  byte[] date = ? [b]// como eu faria apartir do array de bytes recebido por parâmetro, buscar o array de bytes da imagem?[/b]
  
  return new ImageTest(image, date, precision);

}

}

// um int tem 32 bits (4 bytes)
// um long tem 64 bits (8 bytes)
byte[] image = new byte[bytes.length - 4 - 8];
input.read(image);