Hexadecimal codificado en forma de matriz de bytes diferentes a la misma matriz de bytes "objeto" convierte a la matriz de bytes.Por qué?

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

Pregunta

Esta es una pregunta por curiosidad, más que de cualquier necesidad urgente.He encontrado algunos códigos para convertir un objeto en una matriz de bytes (yo pensaba que lo necesitaba en el momento).

El uso de los bienes comunes codec me di cuenta de que la codificación Hexadecimal de la representación de cadena de la pureza de la matriz de bytes era diferente a lo que tengo si me pasa a la matriz de bytes a través de la "toByteArray" método de abajo.Me di cuenta de que la versión más larga que termina con la versión más corta de la cadena Hexadecimal de la representación.

Instintivamente esto no parece correcto, ¿por qué sucede esto?

¿Qué hacen los bytes adicionales que se encuentra a través de la "toByteArray" método de conversión representan?

Supongo que es algo que ver con la codificación?

Muchas Gracias, espero que esto no es demasiado de un novato pregunta.

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

¿Fue útil?

Solución

La segunda codificación es mucho más larga porque es un formato de serialización de objetos, mientras que el primer caso es solo el contenido.La serialización del objeto tiene el encabezado, el tipo del objeto y, finalmente, el contenido en el objeto (notará que el final es el mismo)

Otros consejos

Un ObjectOutputStream es capaz de serializar cualquier tipo de objeto (como mucho tiempo ya que es Serializable).Así, no se puede asignar cualquier byte[] a sí mismo, ya que esto implicaría que no hay espacio para otros objetos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top