نموذج مشفر سداسي عشري لمصفوفة بايت مختلفة عن نفس "كائن" مصفوفة البايت المحولة إلى مصفوفة بايت.لماذا؟

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

سؤال

يتم طرح هذا السؤال بدافع الفضول وليس لأي حاجة ملحة.لقد وجدت بعض التعليمات البرمجية لتحويل كائن إلى مصفوفة بايت (اعتقدت أنني بحاجة إليها في ذلك الوقت).

باستخدام برنامج الترميز المشترك، لاحظت أن تمثيل السلسلة السداسية المشفرة لمصفوفة البايت النقية كان مختلفًا عما حصلت عليه إذا قمت بتمرير مصفوفة البايت من خلال طريقة "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 ACED00057572000200025B42ACF317F8060854E0020000787000000D537461636B6F76666666C6F77

هل كانت مفيدة؟

المحلول

الترميز الثاني أصبح لفترة أطول من ذلك بكثير لأنه تنسيق تسلسل كائن في حين أن الحالة الأولى هي فقط المحتوى.يحتوي تسلسل الكائن على رأس ونوع الكائن وأخيرا المحتوى الموجود في الكائن (ستلاحظ النهاية هو نفسه)

نصائح أخرى

يستطيع ObjectOutputStream إجراء تسلسل لأي نوع من الكائنات (طالما أنه قابل للتسلسل).لذلك، لا يمكن حقًا تعيين أي منها byte[] لنفسه، لأن هذا يعني عدم وجود مكان لأشياء أخرى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top