Hex-codierte Form des Byte-Arrays, die sich vom gleichen Byte-Array-„Objekt“ unterscheidet und in ein Byte-Array konvertiert wird.Warum?

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

Frage

Diese Frage wird eher aus Neugier als aus dringendem Bedürfnis gestellt.Ich habe Code zum Konvertieren eines Objekts in ein Byte-Array gefunden (ich dachte damals, ich bräuchte ihn).

Bei der Verwendung von commons-codec ist mir aufgefallen, dass sich die codierte Hex-String-Darstellung des reinen Byte-Arrays von der unterschied, die ich erhalten habe, wenn ich das Byte-Array über die unten stehende Methode „toByteArray“ übergeben hätte.Mir ist aufgefallen, dass die längere Version mit der kürzeren Version der Hex-String-Darstellung endet.

Instinktiv scheint das nicht richtig zu sein, warum passiert das?

Was bedeuten die zusätzlichen Bytes, die über die Konvertierungsmethode „toByteArray“ gefunden wurden?

Ich vermute, es hat etwas mit der Codierung zu tun?

Vielen Dank, ich hoffe, das ist keine allzu große Frage für Anfänger.

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

ERGEBNIS

537461636B6F766572666C6F77 ACED0005757200025B42ACF317F8060854E002000078700000000D537461636B6F766572666C6F777

War es hilfreich?

Lösung

Die zweite Kodierung ist viel länger, da es sich um ein Objekt-Serialisierungsformat handelt, während der erste Fall nur der Inhalt ist.Die Objekterialisierung hat den Header, den Typ des Objekts und schließlich der Inhalt des Objekts (Sie werden feststellen, dass das Ende gleich ist)

Andere Tipps

Ein ObjectOutputStream kann jeden Objekttyp serialisieren (sofern er serialisierbar ist).Es kann also nicht wirklich welche abbilden byte[] für sich selbst, da dies bedeuten würde, dass kein Platz für andere Objekte vorhanden ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top