تدفق تشغيل البيانات
في حزمة IO ، يتم توفير تدفقات تشغيل بيانات مستقلة عن النظام الأساسي:
DatainputStream
DataOutputStream
عادةً ما يقوم دفق إخراج البيانات بإخراج البيانات بتنسيق معين ، ثم قراءة البيانات بتنسيق معين من خلال دفق إدخال البيانات.
تحدد واجهة DataOutputStream سلسلة من عمليات Writexxx () ، والتي يمكنها كتابة بيانات عن أنواع البيانات المختلفة.
مثال: اكتب وقراءة البيانات باستخدام تدفقات معالجة البيانات
استيراد java.io.dataOutputStream ؛ استيراد java.io.file ؛ استيراد java.io.fileOutputStream ؛ الفئة العامة dataOutputStreamDemo {public static void main (string args []) يلقي استثناء {// جميع الاستثناءات رمي dataoutputstream dos = null ؛ // إعلان ملف كائن دفق دفق البيانات f = ملف جديد ("d:" + file.separator + "order.txt") ؛ . // instanted datauptured Date Dream Compround Names [] = {"shirt" ، "glove" ، "scarf"} ؛ // اسم المنتج أسعار تعويم [] = {98.3f ، 30.3f ، 50.5f} ؛ // سعر المنتج int nums [] = {3،2،1} ؛ // كمية المنتج لـ (int i = 0 ؛ i <names.length ؛ i ++) {// loop output dos.writechars (names [i]) ؛ // كتابة سلسلة dos.writechar ('/t') ؛ // اكتب فاصل dos.writefloat (الأسعار [i]) ؛ // كتابة سعر dos.writechar ('/t') ؛ // اكتب delimiter dos.writeint (nums [i]) ؛ // كتابة الكمية dos.writechar ('/n') ؛ // newline} dos.close () ؛ // إغلاق دفق الإخراج}} ؛ استيراد java.io.datainputStream ؛ استيراد java.io.file ؛ استيراد java.io.fileInputStream ؛ فئة عامة DatainputStreamDemo {public static void main (string args []) يلقي استثناء {// جميع الاستثناءات datainputstream dis = null ؛ // إعلان ملف كائن دفق إدخال البيانات f = ملف جديد ("d:" + file.separator + "order.txt") ؛ // مسار حفظ الملف dis = datainputStream جديد (FileInputStream جديد (F)) ؛ // instantiate اسم سلسلة كائن دفق دفق البيانات = null ؛ // استقبال الاسم العائم السعر = 0.0F ؛ // استلام السعر int num = 0 ؛ // استقبال الكمية temat char [] = null ؛ // استلام اسم المنتج int len = 0 ؛ // احفظ عدد قراءة البيانات char c = 0 ؛ // '/u0000' جرب {بينما (صحيح) {temp = new char [200] ؛ // Open Space Len = 0 ؛ بينما ((c = dis.readchar ())! = '/t') {// استلام temp [len] = c ؛ Len ++ ؛ // قراءة طول بالإضافة إلى 1} name = سلسلة جديدة (temp ، 0 ، len) ؛ // تغيير صفيف الأحرف إلى سعر السلسلة = dis.readfloat () ؛ // قراءة السعر dis.readchar () ؛ // read /t num = dis.readint () ؛ // قراءة int dis.readchar () ؛ // قراءة int dis.readchar () ؛ // read/n system.out.printf ("الاسم: ٪ s ؛ السعر: ٪ 5.2f ؛ الكمية: ٪ d/n" ، الاسم ، السعر ، num) ؛ }} catch (استثناء e) {} dis.Close () ؛ }} ؛التسلسل الكائن
التسلسل الكائن هو وسيلة لتحويل الكائنات إلى تدفقات البيانات الثنائية. من خلال تسلسل الكائن ، يمكن تحقيق نقل أو تخزين الكائنات بسهولة.
إذا أراد فئة دعم التهيئة ، فيجب على الفصل تنفيذ واجهة java.io.serilizable. يتم تعريف الواجهة على النحو التالي:
publicInterFaceserIlizable {}
لا توجد طريقة في هذه الواجهة ، لذلك تنتمي هذه الفئة إلى واجهة تسمية ، مما يشير إلى أن الفئة التي تنفذ الواجهة لها بعض القدرات.
1. التسلسل وفرس الأشياء
2.serialversionuid
يتم إدخال ثابت التسلسلي في عملية التسلسل. يمكن استخدام هذا الثابت للتحقق من اتساق الإصدار. عند إلغاء التخلص من ذلك ، ستقارن JVM المسلسل المسلسل في التيار في تيار البايت مع التسلسل المسلسل للفئة المقابلة المحلية. إذا تم اعتبار الشيء نفسه متسقًا ، فقد يتم إلغاء التخلص منه ، وإلا فإن استثناء مع إصدارات التسلسل غير المتسقة سيحدث.
استيراد java.io.serializable ؛ شخص الطبقة العامة prementsserializable {private string name ؛ // إعلان سمة الاسم ، لكن هذه السمة ليست عصرًا خاصًا بالخاصة ؛ // إعلان Age Attribute PublicPerson (اسم السلسلة ، int age) {// تعيين المحتوى عن طريق إنشاء this.name = name ؛ this.age = العمر ؛ } publicstring toString () {// الكتابة فوق طريقة toString () لإرجاع "الاسم:" + this.name + "؛ العمر:" + this.age ؛ }} ؛ 3. دفق إخراج الكائن: ObjectOutputStream
إذا أراد كائن الإخراج ، فيجب عليه استخدام فئة ObjectOutputStream ، والتي يتم تعريفها على النحو التالي
إذا كانت السمة في كائن ما لا تريد تسلسلها ، فيمكن إعلانها باستخدام الكلمة الرئيسية العابرة.
ImportJava.io.file ؛ ImportJava.io.fileOutputStream ؛ ImportJava.io.outputStream ؛ ImportJava.io.ObjectOutputStream ؛ publicClass Serdemo01 {public static void main (args args []) throwsexception {file f = new file ("d:" + file.separator + "test.txt") ؛ // تحديد Save Path ObjectOutputStream OOS = NULL ؛ // إعلان أن إخراج الكائن OutputStream Out = newFileOutputStream (F) ؛ // File Output Dream OOS = New ObjectOutputStream (Out) ؛ OOS.WriteObject (شخص جديد ("Zhang San" ، 30)) ؛ // حفظ الكائن ooos.close () ؛ // يغلق } }؛4. دفق إدخال الكائن: ObjectInputStream
ImportJava.io.file ؛ ImportJava.io.fileInputStream ؛ ImportJava.io.inputStream ؛ importjava.io.objectInputStream ؛ PublicClass serdemo02 {public static void main (string args []) throwsexception {file f = new file ("d:" + file.separator + "test.txt") ؛ // تحديد Save Path ObjectInputStream OIS = NULL ؛ // إعلان إدخال دفق إدخال الكائن inputStream = newFileInputStream (F) ؛ // file Inport Dream ois = new ObjectInputStream (input) ؛ // instantiate Object Inport Dream Object OBJ = OIS.ReadObject () ؛ // قراءة الكائن ois.close () ؛ // Close System.out.println (OBJ) ؛ }} ؛6. تسلسل مجموعة من الأشياء
عند إخراج كائن ، يتم توفير عملية إخراج كائن واحدة فقط (WriteObject (ObjectObj)) ولا يتم توفير كائنات متعددة. إذا كنت ترغب في إجراء تسلسل كائنات متعددة الآن ، فيمكنك استخدام صفيف الكائن لإكماله. نظرًا لأن الصفيف هو نوع بيانات مرجعية ، يمكنك استخدام نوع الكائن مباشرة لتلقيه.
ImportJava.io.file ؛ ImportJava.io.ioException ؛ ImportJava.io.fileOutputStream ؛ ImportJava.io.outputStream ؛ ImportJava.io.ObjectOutputStream ؛ ImportJava.io.fileInputStream ؛ ImportJava.io.inputStream ؛ importjava.io.objectInputStream ؛ publicclass serdemo05 {public static void main (args args []) throwsexception {perfor per [] = {new شخص ("Zhang San" ، 30) ، NewPerson ("Li Si" ، 31) ، شخص جديد ("Wang Wu" ، 32)} ؛ سير (لكل) ؛ كائن o [] = (object []) dser () ؛ لـ (int i = 0 ؛ i <o.length ؛ i ++) {person p = (person) o [i] ؛ system.out.println (p) ؛ }} public static void ser (Object obj []) throwsexception {file f = new file ("d:" + file.separator + "test.txt") ؛ // تحديد Save Path ObjectOutputStream OOS = NULL ؛ // إعلان أن إخراج الكائن OutputStream Out = fileOutputStream جديد (F) ؛ // File Output Dream OOS = New ObjectOutputStream (Out) ؛ OOS.WriteObject (OBJ) ؛ // Save Object OOS.Close () ؛ // Close} كائن ثابت عام [] dser () يلقي استثناء {file f = new file ("d:" + file.separator + "test.txt") ؛ // تحديد Save Path ObjectInputStream OIS = NULL ؛ // إعلان إدخال دفق إدخال الكائن inputStream = newFileInputStream (F) ؛ // file Inport Dream ois = new ObjectInputStream (input) ؛ // instantiate كائن دفق إدخال الكائن OBJ [] = (Object []) ois.ReadObject () ؛ // اقرأ الكائن ois.close () ؛ // إغلاق عودة OBJ ؛ }} ؛يعد عدد الكائنات التي يمكن أن يخزنها الصفيف محدودًا ، بحيث يمكنك استخدام مجموعات الفصول لأداء عمليات التسلسل.
دفق مضغوط
من أجل تقليل كمية البيانات أثناء الإرسال ، يتم توفير تدفقات مضغوطة أيضًا في Java ، ويمكن ضغط الملفات أو المجلدات في zip و jar و gzip وغيرها من التنسيقات.
يستخدم هذا الدفق أقل ، لذلك مجرد مقدمة موجزة.
لخص
ما سبق هو كل محتوى هذه المقالة حول تدفق تشغيل بيانات Java IO ، وتسلسل الكائن ، وتحليل رمز الدفق المضغوط. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!