HEX Кодированная форма байтового массива, отличающаяся от же байтового массива «Объект», преобразованный в байтовый массив.Почему?

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

Вопрос

Этот вопрос просят из любодозначности, а не любые срочные потребности.Я нашел какой-то код для преобразования объекта в байтовый массив (я подумал, что мне нужно в то время).

Использование Commons-Codec Я заметил, что в закодированном шестигранном строке строки чистого байтового массива отличалось от того, что я получил, если бы я передал массив байтов через метод «Tobytearray» ниже.Я заметил, что более длинная версия заканчивается более коротким версией шестигранного строкового представления.

Инстинктивно это не кажется правильным, почему это происходит?

Что нашли дополнительные байты через метод преобразования «TOBYTEARRAY»?

Я предполагаю, что это что делать с кодировкой?

Большое спасибо, я надеюсь, что это не слишком много новичков.

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

<Сильный> Результат

537461636b6f766572666c6f77 ACED0005757200025B42ACF317F8060854E002000078700000000D53746160000B6F7661636B6F766572666C6F77

Это было полезно?

Решение

Второе кодирование намного дольше, потому что это формат сериализации объекта, тогда как первый случай - это просто содержимое.Сериализация объекта имеет заголовок, тип объекта и, наконец, содержимое в объекте (вы заметите, что конец одинаково)

Другие советы

ObjectoutStream способен сериализовать любой тип объекта (до тех пор, пока он сериализуется).Итак, он не может действительно сопоставить любой генеракодицетагкод к себе, поскольку это подразумевает, что нет места для других объектов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top