Hex ha codificato la forma di matrice di byte diversa dalla stessa array di byte "oggetto" convertito in byte array.Perché?

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

Domanda

Questa domanda è posta fuori curiosità piuttosto che qualsiasi esigenza urgente.Ho trovato del codice per convertire un oggetto in un array di byte (pensavo di averne bisogno in quel momento).

Usando Commons-Codec Ho notato che la rappresentazione della stringa esagonale codificata del puro array di byte era diverso da ciò che ho ottenuto se ho superato l'array di byte attraverso il metodo "Tobytearray" di seguito.Ho notato che la versione più lunga termina con la versione più breve della rappresentazione della stringa esagonale.

istintivamente questo non sembra giusto, perché questo accade?

Cosa hanno trovato i byte extra attraverso il metodo di conversione "tobytearray" rappresentano?

Immagino che sia qualcosa da fare con la codifica?

Molte grazie, spero che questa non sia troppa una domanda newbie.

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;
    }
}
.

Risultato

.

537461636B6F766572666C6F77 ACED0005757200025B42ACF317F8060854E002000078700000000D537460000D5374616600d53746666b6f7666172666c6f77

È stato utile?

Soluzione

La seconda codifica è molto più lunga perché è un formato di serializzazione dell'oggetto mentre il primo caso è solo il contenuto.La serializzazione dell'oggetto ha l'intestazione, il tipo dell'oggetto e infine il contenuto nell'oggetto (noteresti la fine è la stessa)

Altri suggerimenti

Un oggetto ObjectStream è in grado di serializzare qualsiasi tipo di oggetto (purché sia serializzabile).Quindi, non può davvero mappare alcun byte[] a se stesso, poiché questo implicherebbe non c'è spazio per altri oggetti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top