Hexadecimal codificado em forma de matriz de bytes diferentes para a mesma matriz de bytes "objeto" convertidos a matriz de bytes.Por quê?

StackOverflow https://stackoverflow.com/questions/5485836

Pergunta

Esta pergunta é feita de curiosidade, ao invés de incluir qualquer necessidade urgente.Eu encontrei algumas código para converter um objeto para uma matriz de bytes (eu pensei que eu precisava na época).

Usando commons-codec-eu notei que a seqüência Hexadecimal codificado em representação do puro matriz de bytes foi diferente do que eu tenho, se eu passava a matriz de bytes através do "toByteArray" método abaixo.Notei que a versão mais termina com a versão mais curta do Hex representação de seqüência de caracteres.

Instintivamente, isso não parece certo, por que isso acontece?

O que fazer bytes extras encontrados através do "toByteArray" método de conversão representam?

Eu estou supondo que é algo a ver com a codificação?

Muito Obrigado, espero que este não é demasiado de um novato pergunta.

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import org.apache.commons.codec.binary.Hex;

public class Test {

    public static void main(String[] args) throws IOException {
        byte[] bytes = "Stackoverflow".getBytes();
        System.out.println(Hex.encodeHexString(bytes));
        System.out.println(Hex.encodeHexString(toByteArray(bytes)));
    }

    public static byte[] toByteArray(Object obj) throws IOException {
        byte[] bytes = null;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(obj);
        oos.flush();
        oos.close();
        bos.close();
        bytes = bos.toByteArray();
        return bytes;
    }
}

RESULTADO

537461636b6f766572666c6f77 aced0005757200025b42acf317f8060854e002000078700000000d537461636b6f766572666c6f77

Foi útil?

Solução

Segundo a codificação é muito mais longo porque é um objeto de formato de serialização considerando que o primeiro caso é apenas o conteúdo.A serialização de Objeto tem o cabeçalho, o tipo do objeto e, finalmente, o conteúdo do objeto (você vai notar o final é o mesmo)

Outras dicas

Um ObjectOutputStream é capaz de serializar qualquer tipo de objeto (como ele é Serializável).Então, ele realmente não pode mapear qualquer byte[] para si, já que isto implicaria que não há espaço para outros objetos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top