Olá. Estou criando um objeto da classe ByteArrayOutputStream em um array de bytes invocando o método toByteArray(). De acordo com a documentação da SUN, este método cria um array de bytes por complemento de 2. Pois bem, como tenho de serializá-lo eu acabo criando um objeto String assim:
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
//... baos.write(...);
final String encoded = new String(baos.toByteArray());
//repassa encoded...
O outro lado da aplicação recebe este String (que é codificado em UTF-16 por default) e pega os bytes novamente:
//...
byte[] buffer = encoded.getBytes();
//...
Então quando comparo os bytes gerados por toByteArray() e o getBytes() alguns dos bytes são diferentes e não consigo deserializar meu objeto. Acredito que o problema seja a maneira como String trata meu array de bytes. Por isso fiz questão de mencionar o esquema do charset (posso estar enganado).
Andei dando mais uma olhada na API e vi que o getBytes() de String pode receber como parâmetro o tipo de codificação. Tentei UTF-8, UTF-16LE, UTF-16BE… e nada.
Quando percorro o array gerado pelo baos, tenho algo assim:
-128, -20, 105, -63, -82, -86, -52, -66, -122, 33, 22, -84, -115, 120, 7, 65, 2, -61, 8, 12, 127,...
Quando percorro o array gerado pelo String, tenho isto:
-128, -20, 105, -63, -82, -86, -52, -66, -122, 33, 22, -84, 63, 120, 7, 65, 2, -61, 8, 12, 127,...
Percebam que o -115 por exemplo é transformado em 63. Estou perdido nesta transição. Alguém tem alguma idéia de como lidar como este problema? O que posso estar fazendo de errado? Grato T+