BytearRayInputStream مقدمة
BytearRayInputStream هو دفق إدخال صفيف بايت. يرث من inputstream.
أنه يحتوي على مخزن مؤقت داخلي يحتوي على بايت يقرأ من الدفق ؛ بعبارات Layman ، فإن المخزن المؤقت الداخلي هو مجموعة من البايتات ، ويتم تنفيذ BytearRayInputStream بشكل أساسي من خلال مجموعة من البايتات.
نعلم جميعًا أن InputStream يوفر واجهات خارجية من خلال القراءة () لكي تقرأ بيانات البايت ؛ بينما يحدد ByTearRayInputStream داخليًا عدادًا إضافيًا يتم استخدامه لتتبع البايت التالي ليتم قراءته بواسطة طريقة Read ().
نموذج رمز للاستخدام التفصيلي لـ API في BytearRayInputStream ، راجع رمز العينة (ByteArrayInputStreamTest.java):
استيراد java.io.bytearrayinputStream ؛ استيراد java.io.bytearrayoutputstream ؛/*** برنامج اختبار bytearrayinputstream*/الفئة العامة bytearrayinputStreamtest {private static final int len = 5 ؛ // المقابلة للحرف الإنجليزي "abcddefghijklmnopqrssttuvwxyz byte byte static static [] arrayletters = {0x61 ، 0x62 ، 0x63 ، 0x64 ، 0x65 ، 0x66 ، 0x67 ، 0x68 ، 0x69 ، 0x6a ، 0x6b ، 0x6. 0x6f ، 0x70 ، 0x71 ، 0x72 ، 0x73 ، 0x74 ، 0x75 ، 0x76 ، 0x77 ، 0x78 ، 0x79 ، 0x7a} ؛ public static void main (string [] args) {String tmp = new string (Arrayletters) ؛ System.out.println ("Arrayletters ="+TMP) ؛ tesbytearrayinputStream () ؛ } / ** * وظيفة اختبار API BytearRayInputStream * / private static void tesbytearrayinputstream () {// إنشاء دفق بايت BytearRayInputStream ، فإن المحتوى هو Arrayletters bytearrayinputstream bais = new BytearRayInputStream (arrayletters) ؛ // اقرأ 5 بايت من دفق البايت لـ (int i = 0 ؛ i <len ؛ i ++) {// إذا كان بإمكانك الاستمرار في قراءة البايت التالي ، اقرأ البايت التالي إذا (bais.available ()> = 0) {// اقرأ "البايت التالي من دفق البايت" int tmp = bais.read () ؛ system.out.printf ("٪ d: 0x ٪ s/n" ، i ، integer.toHexString (TMP)) ؛ }} // إذا لم يدعم "This Byte Stream" وظيفة وضع العلامات ، فخرج مباشرةً إذا (! bais.marksupported ()) {system.out.println ("Make not support!") ؛ يعود ؛ } // علامة "موضع القراءة التالي في دفق البايت". هذا هو ، - علامة "0x66" ، لأنه تمت قراءة 5 بايت من قبل ، فإن موضع القراءة التالي هو البايت السادس "// (01) ،" المعلمة 0 " Mark () "Bais.mark (0) ؛ // Skip 5 Bytes. بعد تخطي 5 بايت ، يجب أن تكون قيمة القراءة التالية في دفق البايت" 0x6b ". Bais.Read (BUF ، LEN) ؛ دفق البايت "إلى" الموضع الذي يحمل علامة Mark () "، أي 0x66. // تحويل BUF إلى سلسلة سلسلة. الحرف المقابل من "0x66 ، 0x67 ، 0x68 ، 0x69 ، 0x6a" هو "fghij" string str2 = new string (buf) ؛ system.out.printf ("str2 = ٪ s/n" ، str2) ؛ }} نتائج التشغيل:
arrayletters = abcdefghijklmnopqrstuvwxyz0: 0x611: 0x622: 0x633: 0x644: 0x65str1 = KlmnoStr2 = fghij
وصف النتائج:
(01) Arrayletters هي صفيف بايت. قيمة رمز ASCII المقابلة لـ 0x61 هي A ، قيمة رمز ASCII المقابلة لـ 0x62 هي B ، وهكذا ...
(02) bytearrayinputstream bais = جديد bytearrayinputStream (arrayletters) ؛ هذه الجملة هي إنشاء "Byte Stream Bais" ، ومحتواها هو arrayletters.
(03) لـ (int i = 0 ؛ i <len ؛ i ++) ؛ الغرض من هذا للحلقة هو قراءة 5 بايت من تيار البايت. في كل مرة يتم استدعاء bais.read () ، يتم قراءة بايت واحد من دفق البايت.
(04) Bais.Mark (0) ؛ هذه الجملة هي "تعيين علامة البايت تيار". في هذا الوقت ، تكون القيمة المقابلة لموضع MARM هي 0x66.
(05) Bais.Skip (5) ؛ هذه الجملة هي تخطي 5 بايت. بعد تخطي 5 بايت ، تكون قيمة البايت القراءة التالية في دفق البايت المقابل 0x6b.
(06) bais.read (buf ، 0 ، len) ؛ هذه الجملة هي "قراءة بيانات LEN من دفق البايت واكتبها في BUF ، 0 تعني الكتابة من المركز 0 من BUF".
(07) Bais.Reset () ؛ هذه الجملة تعيد تعيين "موضع القراءة التالي في دفق البايت" إلى "الموضع الذي يحمل علامة Mark ()" ، أي 0x66.
بعد تعلم دفق إدخال BytearRayInputStream. بعد ذلك ، نتعلم دفق الإخراج المقابل BYTEARRayOutputStream.
BytearRayoutputStream مقدمة
BytearRayoutputStream هو دفق إخراج صفيف البايت. يرث من OutputStream.
تتم كتابة البيانات الموجودة في BytearRayoutputStream إلى مجموعة بايت. سوف ينمو المخزن المؤقت تلقائيًا حيث يتم كتابة البيانات بشكل مستمر. يمكن الحصول على البيانات باستخدام TobyTearRay () و ToString ().
عينة رمز للاستخدام التفصيلي لـ API في BytearRayoutputStream ، راجع رمز العينة (BytearRayoutputStreamTest.java):
استيراد java.io.ioException ؛ استيراد java.io.outputstream ؛ استيراد java.io.bytearrayoutputstream ؛ استيراد java.io.bytearrayinputstream ؛/** * bytearrayoutputstream test * * author skywang */public class bytearrayoutputest {private int in in in in in in in in in in in in ؛ // المقابلة للحرف الإنجليزي "abcddefghijklmnopqrsttuvwxyz byte static final [] arrayletters = {0x61 ، 0x62 ، 0x63 ، 0x64 ، 0x65 ، 0x66 ، 0x67 ، 0x68 ، 0x69 ، 0x6a ، 0x6b ، 0x6. 0x6f ، 0x70 ، 0x71 ، 0x72 ، 0x73 ، 0x74 ، 0x75 ، 0x76 ، 0x77 ، 0x78 ، 0x79 ، 0x7a} ؛ الفراغ الثابت العام (سلسلة [] args) {// string tmp = new string (arrayletters) ؛ //system.out.println("arrayletters="+tmp) ؛ tesbytearrayoutputstream () ؛ } / ** * وظيفة اختبار API bytearrayoutputstream * / private static void tesbytearrayoutputStream () {// إنشاء bytearrayoutputstream byte bytearrayoutputstream baos = new bytearrayoutputstream () ؛ // اكتب ثلاثة أحرف "A" و "B" و "C" بدورها. يتوافق 0x41 مع A و 0x42 يتوافق مع B و 0x43 يتوافق مع C. baos.write (0x41) ؛ Baos.Write (0x42) ؛ Baos.Write (0x43) ؛ system.out.printf ("baos = ٪ s/n" ، baos) ؛ // اكتب آخر 5 بايتات من "3" في صفيف Arrayletters إلى BAOS. // أي ، "0x64 ، 0x65 ، 0x66 ، 0x67 ، 0x68" مكتوبة في المقابل ، أي ، "defgh" baos.write (Arrayletters ، 3 ، 5) ؛ system.out.printf ("baos = ٪ s/n" ، baos) ؛ // حساب طول int int = baos.size () ؛ system.out.printf ("size = ٪ s/n" ، الحجم) ؛ // تحويل إلى byte [] Array Byte [] buf = baos.tobytearray () ؛ سلسلة str = سلسلة جديدة (buf) ؛ system.out.printf ("str = ٪ s/n" ، str) ؛ // تحويل إلى byte [] Array Byte [] buf = baos.tobytearray () ؛ سلسلة str = سلسلة جديدة (buf) ؛ system.out.printf ("str = ٪ s/n" ، str) ؛ // اكتب baos إلى دفق إخراج آخر حاول {bytearrayoutputstream baos2 = جديد bytearrayoutputstream () ؛ Baos.Writeto ((outputStream) BAOS2) ؛ System.out.printf ("BAOS2 = ٪ S/N" ، BAOS2) ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}} نتائج التشغيل:
BAOS = ABCBAOS = ABCDEFGHSIZE = 8STR = ABCDEFGHBAOS2 = ABCDEFGH