"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تحويل قيمة طويلة إلى صفيف بايت والعودة في جافا؟

كيفية تحويل قيمة طويلة إلى صفيف بايت والعودة في جافا؟

تم النشر بتاريخ 2024-11-08
تصفح:203

How to Convert a Long Value to a Byte Array and Back in Java?

تحويل طويل إلى مصفوفة بايت والعودة في جافا

في جافا، تحويل نوع بيانات بدائي طويل إلى مصفوفة بايت (بايت[] ) والعكس مهمة شائعة لعمليات مختلفة، مثل إرسال البيانات عبر اتصال TCP. إليك حل شامل لتحقيق هذا التحويل:

Long to Byte Array

public byte[] longToBytes(long x) {
    ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
    buffer.putLong(x);
    return buffer.array();
}

تستخدم هذه الطريقة فئة ByteBuffer لإنشاء مخزن مؤقت بحجم Long.BYTES، وهو عدد البايتات المطلوبة لتمثيل قيمة طويلة. يتم استخدام طريقة putLong () لكتابة القيمة الطويلة في المخزن المؤقت، بينما تقوم طريقة array () بإرجاع صفيف البايت الأساسي الذي يمثل المدى الطويل.

مصفوفة البايت إلى Long

public long bytesToLong(byte[] bytes) {
    ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
    buffer.put(bytes);
    buffer.flip(); // Flip the buffer to prepare for reading
    return buffer.getLong();
}

لتحويل مصفوفة البايت مرة أخرى إلى مصفوفة طويلة، يتم إنشاء ByteBuffer جديد وتحميله بمصفوفة البايت المحددة. يتم استخدام طريقة flip () لجعل المخزن المؤقت جاهزًا للقراءة. وأخيرًا، يقرأ أسلوب getLong() القيمة الطويلة من المخزن المؤقت.

التغليف في فئة مساعدة

للراحة، يمكن تغليف طرق التحويل في أداة مساعدة الفئة:

public class ByteUtils {
    private static ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);

    public static byte[] longToBytes(long x) {
        buffer.putLong(0, x);
        return buffer.array();
    }

    public static long bytesToLong(byte[] bytes) {
        buffer.put(bytes, 0, bytes.length);
        buffer.flip(); // Flip the buffer to prepare for reading
        return buffer.getLong();
    }
}

توفر فئة الأداة المساعدة هذه طريقة بسيطة لإجراء التحويل دون الحاجة إلى إنشاء مثيلات ByteBuffer وإدارتها في كل مرة.

اعتبارات Endianness

ملاحظة أن فئة ByteBuffer تستخدم النهاية الأصلية للنظام. إذا كان التوافق عبر الأنظمة الأساسية مطلوبًا، فقد يكون من الضروري اعتبارات إضافية للتعامل مع endianness.

الحل البديل: استخدام المكتبات

على الرغم من أن حلول Java الأصلية المقدمة أعلاه كافية، يمكن أن تصبح مملة في سيناريوهات معينة. بالنسبة لاحتياجات تحويل البيانات المعقدة أو الموسعة، فكر في استخدام مكتبة مثل Guava أو Apache Commons، والتي توفر حلولاً أكثر شمولاً وكفاءة.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3