Conversão de bytes (byte[] para um objeto)

Ola pessoal…

Estou com um probleminha e preciso muuuuuito de ajuda…

O que acontece é que tenho duas aplicações se comunicando via protocolo SIP, meu servidor e meu client. Até então, com mensagens texto, nunca tive problemas. Mas vou gostaria de enviar via SIP um objeto inteiro, ou seja, converte-lo em bytes, para envia-lo, e na “chegada”, de bytes para meu objeto. Acho que seria “serializar” meu objeto…

Pesquisei, mas até agora não entendi nada sobre serialização ou este tipo de conversão… Se alguém puder me ajudar, por favor, serei extremamente grata.

Ah! Pra enviar, o meu componente SipServletRequest converte o objeto direto.

SipServletRequest messageRequest = sipFactory.createRequest(req.getApplicationSession(),"MESSAGE", req.getTo(), req.getFrom());
messageRequest.pushRoute(sipFactory.createSipURI(null, "127.0.0.1:5082"));
messageRequest.addHeader("Accept-Contact", req.getHeader("Accept-Contact"));
messageRequest.addHeader("User-Agent", req.getHeader("User-Agent"));
			
// Set the message content.
ContactBean contato = new ContactBean();
contato.setAddress("flavia@teste.com");
contato.setName("Flavia");
messageRequest.setContent(contato, "text/plain");

Mas ao receber, ele recebe em bytes. E daí é que não sei converter pra “ContactBean”

public void processMessage(String remote, String messageType, byte[] content, int length)
{
                
ContactBean contato = new ContactBean();
// Aqui quero converter
contato = content;
System.out.println(contato.getName());
isResponseReceived = true;

}

Abs.

Implemente Serializable na classe que deve ser serializada.

Obs 1: Todos os atributos da classe que não estejam marcados como transient serão serializados
Obs 2: Todos os atributos que serão serializados devem implementar Serializable tbm.

Com o objeto da classe, vc escreve o objeto usando a classe ObjecOutputStream e lê o mesmo objeto usando ObjetInputStream.
Veja a documentação, está bem explicado.

[]´s

David…

Acabei deixando isso pra ver só hoje, mas ainda está um pouco complicado pra mim. Eu recebo mesmo um vetor de bytes (byte[]). Esse vetor é meu objeto, enviado pelo SIP.

Como leio ele? Tentei ler da seguinte maneira:

// ler byte[] content
ObjectInputStream contatoStream =new ObjectInputStream(new ByteArrayInputStream(content));
ContactBean contact = (ContactBean) contatoStream.readObject();

Mas ele gera um erro na linha da conversão. Diz assim: java.io.StreamCorruptedException: invalid stream header: 636F6D2E

:frowning:

Ah! Dei um implement Serializable na minha classe Contact Bean…