English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا الدرس، سنتعلم باستخدام الأمثلة كيفية استخدام ByteArrayInputStream في Java وكيفية استخدام طرقه.}
يمكن استخدام كلاس ByteArrayInputStream في حزمة java.io لقراءة مجموعة البيانات الإدخالية (بأعداد البايت).
يورث من فئة InputStream التجريدية.
ملاحظةفي ByteArrayInputStream، يتم إنشاء تدفق الإدخال باستخدام مجموعة البايتات. يتضمن هذا الكائن مجموعة بيانات داخلياً لتحفظ بيانات هذا المجموعة المحددة.
لإنشاء تدفق مصدر البايتات، يجب علينا أولاً استيراد حزمة java.io.ByteArrayInputStream. بعد استيراد الحزمة، يمكننا إنشاء تدفق الإدخال.
// إنشاء ByteArrayInputStream لقراءة المجموعة بأكملها ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr);
في هذا السياق، تم إنشاء تدفق الإدخال الذي يقرأ البيانات الكاملة من مجموعة arr. ولكن يمكننا أيضًا إنشاء تدفق إدخال يقرأ بعض البيانات من المجموعة فقط.
// إنشاء ByteArrayInputStream لقراءة جزء من المجموعة ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr, int start, int length);
في هذا السياق، يتم قراءة عدد البايتات المساوية لـ length من تدفق الإدخال من موقع start في المجموعة
يقدم كلاس ByteArrayInputStream تنفيذًا لمختلف الطرق المقدمة من كلاس InputStream
read() - قراءة بايت واحد من المجموعة الموجودة في تدفق الإدخال
read(byte[] array) - قراءة البايتات من تدفق الإدخال واستخدامهما في المجموعة المحددة
read(byte[] array, int start, int length) - قراءة عدد البايتات المساوية لـ length من تدفق并存مها في المجموعة المحددة بدءاً من موقع start
import java.io.ByteArrayInputStream; public class Main { public static void main(String[] args) { //إنشاء مجموعة من البايتات byte[] array = {1, 2, 3, 4}; try { ByteArrayInputStream input = new ByteArrayInputStream(array); System.out.print("من خلال تدفق الإدخال يتم قراءة البايتات:"); for(int i= 0; i < array.length; i++) { //قراءة الأبجديات int data = input.read(); System.out.print(data + ", "); } input.close(); } catch(Exception e) { e.getStackTrace(); } } }
نتيجة الإخراج
الأبجديات التي تم قراءتها من تيار الإدخال: 1, 2, 3, 4,
في هذا المثال، قمنا بإنشاء تيار إدخال من البايتات المسماة input.
ByteArrayInputStream input = new ByteArrayInputStream(array);
في هذا المثال، يشمل تيار الإدخال جميع البيانات من المجموعة المحددة. لقراءة البيانات من تيار الإدخال، استخدمنا طريقة read().
للحصول على عدد وحدات البيانات المتاحة في تيار الإدخال، يمكننا استخدام الطريقة available(). على سبيل المثال،
import java.io.ByteArrayInputStream; public class Main { public static void main(String args[]) { //إنشاء مجموعة من البايتات byte[] array = { 1, 2, 3, 4 }; try { ByteArrayInputStream input = new ByteArrayInputStream(array); //استعادة عدد وحدات البيانات المتاحة System.out.println("عدد وحدات البيانات المتاحة عند البداية: " + input.available()); //قراءة 2 وحدات بيانات من تيار الإدخال input.read(); input.read(); //استعادة عدد وحدات البيانات المتاحة System.out.println("عدد وحدات البيانات المتاحة عند الانتهاء: " + input.available()); input.close(); } catch (Exception e) { e.getStackTrace(); } } }
نتيجة الإخراج
عدد وحدات البيانات المتاحة عند البداية: 4 عدد وحدات البيانات المتاحة عند الانتهاء: 2
في هذا المثال،
لقد استخدمنا طريقة available() لتحقق من عدد وحدات البيانات المتاحة في تيار الإدخال.
ثم، استخدمنا طريقة read() مرتين لقراءة 2 وحدات بيانات من تيار الإدخال.
الآن، بعد قراءة 2 وحدة بيانات، قمنا بالتحقق من وحدات البيانات المتاحة. هذه المرة، انخفض عدد وحدات البيانات المتاحة بناءً على ذلك 2.
لإهمال وتخطي عدد معين من وحدات البيانات يمكن استخدام الطريقة skip(). على سبيل المثال
import java.io.ByteArrayInputStream; public class Main { public static void main(String args[]) { //إنشاء مجموعة من البايتات byte[] array = { 1, 2, 3, 4 }; try { ByteArrayInputStream input = new ByteArrayInputStream(array); //استخدام skip() الطريقة input.skip(2); System.out.print("تخطي 2 وحدة بيانات من تيار الإدخال: "); int data = input.read(); while (data != -1) { System.out.print(data + ", "); data = input.read(); } // close() الطريقة input.close(); } catch (Exception e) { e.getStackTrace(); } } }
نتيجة الإخراج
منفذ الإدخال بعد القفز إلى 2 بيت: 3, 4,
في المثال السابق، استخدمنا طريقة skip() للقفز إلى 2 بيت من منفذ الإدخال. لذلك، لن يتم قراءة 1 و 2 من منفذ الإدخال.
لإغلاق منفذ الإدخال، يمكنك استخدام طريقة close().
لكن، طريقة close() في فئة ByteArrayInputStream لا تعمل. حتى بعد استدعاء طريقة close()، يمكننا استخدام طرق هذه الفئة.
الطريقة | وصف المحتوى |
---|---|
finalize() | تأكد من أن يتم استدعاء طريقة close() |
mark() | تسمية موضع البيانات التي تم قراءتها في منفذ الإدخال |
reset() | استعادة التحكم في العنصر الذي تم تعيينه له علامة النقطة |
markSupported() | تحقق مما إذا كان منفذ الإدخال يدعم mark() و reset() |