กระแสการทำงานของข้อมูล
ในแพ็คเกจ IO มีการจัดเตรียมสตรีมการทำงานของแพลตฟอร์มที่ไม่ขึ้นกับแพลตฟอร์มสองแบบ:
datainputStream
dataOutputStream
โดยปกติแล้วสตรีมเอาท์พุทข้อมูลจะส่งออกข้อมูลในรูปแบบที่กำหนดจากนั้นอ่านข้อมูลในรูปแบบที่แน่นอนผ่านสตรีมอินพุตข้อมูล
อินเทอร์เฟซ DataOrtputStream กำหนดชุดของการดำเนินการ writexxx () ซึ่งสามารถเขียนข้อมูลของชนิดข้อมูลต่างๆ
ตัวอย่าง: เขียนและอ่านข้อมูลโดยใช้สตรีมการจัดการข้อมูล
นำเข้า Java.io.DataOutputStream; นำเข้า Java.io.File; นำเข้า Java.io.FileOutputStream; คลาสสาธารณะ DataOutputStreamDemo {โมฆะคงที่สาธารณะหลัก (สตริง args []) โยนข้อยกเว้น {// ข้อยกเว้นทั้งหมดโยน dataOutputStream dos = null; // ประกาศไฟล์กระแสข้อมูลเอาต์พุตข้อมูลไฟล์ f = ไฟล์ใหม่ ("d:" + file.Separator + "order.txt"); // ไฟล์บันทึกของไฟล์ DOS = ใหม่ dataOutputStream (ใหม่ fileOutputStream (F)); // อินสแตนซ์ข้อมูลเอาท์พุทสตรีมชื่อสตริงวัตถุ [] = {"เสื้อ", "ถุงมือ", "Scarf"}; // ชื่อผลิตภัณฑ์ราคาลอย [] = {98.3f, 30.3f, 50.5f}; // ราคาผลิตภัณฑ์ int nums [] = {3,2,1}; // ปริมาณผลิตภัณฑ์สำหรับ (int i = 0; i <names.length; i ++) {// loop output dos.writechars (ชื่อ [i]); // เขียนสตริง dos.writechar ('/t'); // เขียนตัวคั่น dos.writefloat (ราคา [i]); // เขียนราคา dos.writechar ('/t'); // เขียน DOS.WRITEINT (NUMS [i]); // เขียนปริมาณ dos.writechar ('/n'); // newLine} dos.close (); // ปิดสตรีมเอาต์พุต}}; นำเข้า java.io.datainputstream; นำเข้า Java.io.File; นำเข้า Java.io.FileInputStream; คลาสสาธารณะ datainputStreamDemo {โมฆะคงที่สาธารณะหลัก (สตริง args []) โยนข้อยกเว้น {// ข้อยกเว้นทั้งหมดโยน datainputStream dis = null; // ประกาศไฟล์ออบเจ็กต์กระแสข้อมูลอินพุตข้อมูล f = ไฟล์ใหม่ ("d:" + file.Separator + "order.txt"); // การบันทึกเส้นทางของไฟล์ dis = new datainputStream (ใหม่ FileInputStream (F)); // อินสแตนซ์อินพุตข้อมูลข้อมูลสตริงวัตถุชื่อ = null; // รับชื่อ Float Price = 0.0f; // รับราคา int num = 0; // รับอุณหภูมิถ่านหิน [] = null; // รับชื่อผลิตภัณฑ์ int len = 0; // บันทึกจำนวนการอ่านข้อมูลถ่าน c = 0; // '/u0000' ลอง {ในขณะที่ (จริง) {temp = char ใหม่ [200]; // Open Space Len = 0; ในขณะที่ ((c = dis.readchar ())! = '/t') {// รับเนื้อหาเนื้อหา [len] = c; Len ++; // อ่านความยาวบวก 1} name = สตริงใหม่ (อุณหภูมิ, 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 (exception e) {} dis.close (); -การทำให้เป็นอนุกรมวัตถุ
การทำให้เป็นอนุกรมวัตถุเป็นวิธีการเปลี่ยนวัตถุให้เป็นสตรีมข้อมูลไบนารี ผ่านการทำให้เป็นอนุกรมของวัตถุการส่งหรือการจัดเก็บของวัตถุสามารถรับรู้ได้ง่าย
หากคลาสต้องการสนับสนุนการเริ่มต้นคลาสจะต้องใช้อินเตอร์เฟส java.io.serilizable อินเทอร์เฟซถูกกำหนดดังนี้:
PublicInterfaceserilizable {}
ไม่มีวิธีการในอินเทอร์เฟซนี้ดังนั้นคลาสนี้จึงเป็นของอินเทอร์เฟซฉลากแสดงให้เห็นว่าคลาสที่ใช้อินเตอร์เฟสมีความสามารถบางอย่าง
1. การทำให้เป็นอนุกรมและ deserialization ของวัตถุ
2.SerialVersionuid
ค่าคงที่ serialversionuid ถูกนำมาใช้ในการดำเนินการแบบอนุกรม ค่าคงที่นี้สามารถใช้เพื่อตรวจสอบความสอดคล้องของเวอร์ชัน เมื่อ deserializing, JVM จะเปรียบเทียบ serialversionuid ในกระแสไบต์ที่ผ่านเข้ากับ serialversionuid ของคลาสที่สอดคล้องกันในท้องถิ่น หากการพิจารณาเดียวกันนั้นสอดคล้องกันก็สามารถ deserialized มิฉะนั้นจะมีข้อยกเว้นที่มีเวอร์ชันการทำให้เป็นอนุกรมที่ไม่สอดคล้องกันจะเกิดขึ้น
นำเข้า java.io.serializable; บุคคลระดับสาธารณะใช้งาน {ชื่อสตริงส่วนตัว; // ประกาศแอตทริบิวต์ชื่อ แต่แอตทริบิวต์นี้ไม่ได้เป็นอนุกรมอายุ int ส่วนตัว // ประกาศแอตทริบิวต์อายุ PublicPerson (ชื่อสตริงอายุ int) {// ตั้งค่าเนื้อหาโดยการสร้าง this.name = name; this.age = อายุ; } publicString toString () {// overwrite เมธอด toString () เพื่อส่งคืน "ชื่อ:" + this.name + "; อายุ:" + this.age; - 3. สตรีมเอาต์พุต Object: ObjectOutputStream
หากวัตถุต้องการเอาต์พุตจะต้องใช้คลาส ObjectOutputStream ซึ่งกำหนดไว้ดังนี้
หากแอตทริบิวต์ในวัตถุไม่ต้องการให้เป็นอนุกรมก็สามารถประกาศได้โดยใช้คำหลักชั่วคราว
importjava.io.file; importJava.io.FileOutputStream; importJava.io.OutputStream; importJava.io.ObjectOutputStream; publicclass serdemo01 {โมฆะคงที่สาธารณะหลัก (สตริง args []) ThrowSexception {ไฟล์ f = ไฟล์ใหม่ ("d:" + file.Separator + "test.txt"); // กำหนด SAVE PATH ObjectOutputStream oos = null; // ประกาศเอาท์พุท Output OutputStream Out = newFileOutputStream (F); // สตรีมเอาต์พุตไฟล์ oos = new ObjectOutputStream (out); oos.writeObject (บุคคลใหม่ ("จางซาน", 30)); // บันทึกวัตถุ oos.close (); // ปิด } };4. สตรีมอินพุตวัตถุ: ObjectInputStream
importjava.io.file; importJava.io.FileInputStream; importJava.io.InputStream; importJava.io.ObjectInputStream; publicclass serdemo02 {โมฆะคงที่สาธารณะหลัก (สตริง args []) ThrowSexception {ไฟล์ f = ไฟล์ใหม่ ("d:" + file.Separator + "test.txt"); // กำหนด save path objectInputStream ois = null; // ประกาศอินพุตอินพุตอินพุตอินพุตอินพุต = newFileInputStream (F); // การป้อนข้อมูลไฟล์ OIS = ใหม่ ObjectInputStream (อินพุต); // อินสแตนซ์ออบเจ็กต์ออบเจ็กต์วัตถุ OBJ = OIS.ReadObject (); // อ่านวัตถุ ois.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 {โมฆะคงที่สาธารณะหลัก (String args []) ThrowSexception {บุคคลต่อ [] = {คนใหม่ ("จางซาน", 30), Newperson ("Li Si", 31), คนใหม่ ("Wang Wu", 32)}; ser (ต่อ); วัตถุ o [] = (วัตถุ []) dser (); สำหรับ (int i = 0; i <o.length; i ++) {person p = (บุคคล) o [i]; System.out.println (P); }} โมฆะคงที่สาธารณะ ser (Object obj []) ThrowSexception {ไฟล์ f = ไฟล์ใหม่ ("d:" + file.Separator + "test.txt"); // กำหนด SAVE PATH ObjectOutputStream oos = null; // ประกาศเอาท์พุท Output OutputStream OUT = New FileOutputStream (F); // สตรีมเอาต์พุตไฟล์ oos = new ObjectOutputStream (out); oos.writeObject (obj); // บันทึก Object oos.close (); // close} วัตถุคงที่สาธารณะ [] dser () พ่นข้อยกเว้น {ไฟล์ f = ไฟล์ใหม่ ("d:" + file.Saperator + "test.txt"); // กำหนด save path objectInputStream ois = null; // ประกาศอินพุตอินพุตอินพุตอินพุตอินพุต = newFileInputStream (F); // การป้อนข้อมูลไฟล์ OIS = ใหม่ ObjectInputStream (อินพุต); // อินสแตนซ์วัตถุอินพุตวัตถุ objj [] = (object []) ois.readObject (); // อ่านวัตถุ ois.close (); // ปิด return obj; -จำนวนวัตถุที่อาร์เรย์สามารถจัดเก็บได้มี จำกัด ดังนั้นคุณสามารถใช้ชุดคลาสเพื่อดำเนินการอนุกรม
สตรีมบีบอัด
เพื่อลดปริมาณข้อมูลในระหว่างการส่งสตรีมบีบอัดจะมีให้ใน Java และไฟล์หรือโฟลเดอร์สามารถบีบอัดลงในซิป, Jar, GZIP และรูปแบบอื่น ๆ
สตรีมนี้ใช้น้อยลงดังนั้นเพียงแค่แนะนำสั้น ๆ
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับการไหลของข้อมูล Java IO, การทำให้เป็นอนุกรมของวัตถุและการวิเคราะห์รหัสสตรีมที่บีบอัด ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!