1. การทำให้เป็นอนุกรม Java และ deserialization
Java serialization หมายถึงกระบวนการแปลงวัตถุ Java เป็นลำดับไบต์ Java Deserialization หมายถึงกระบวนการกู้คืนลำดับไบต์ลงในวัตถุ Java
2. เหตุใดจึงจำเป็นต้องมีการทำให้เป็นอนุกรมและ deserialization
เรารู้ว่าเมื่อกระบวนการสองกระบวนการสื่อสารจากระยะไกลพวกเขาสามารถส่งข้อมูลประเภทต่าง ๆ ไปให้กันรวมถึงข้อความรูปภาพเสียงวิดีโอ ฯลฯ และข้อมูลเหล่านี้จะถูกส่งบนเครือข่ายในรูปแบบของลำดับไบนารี ดังนั้นเมื่อกระบวนการชวาสองกระบวนการสื่อสารการส่งสัญญาณวัตถุสามารถรับรู้ได้ระหว่างกระบวนการหรือไม่? คำตอบคือใช่ ทำอย่างไร? สิ่งนี้ต้องใช้การทำให้เป็นอนุกรม Java และ deserialization กล่าวอีกนัยหนึ่งในอีกด้านหนึ่งผู้ส่งจำเป็นต้องแปลงวัตถุ Java นี้ให้เป็นลำดับของไบต์แล้วส่งไปยังเครือข่าย ในทางกลับกันผู้รับจะต้องกู้คืนวัตถุ Java จากลำดับของไบต์
เมื่อเราเข้าใจว่าทำไมการทำให้เป็นอนุกรม Java และ deserialization จึงเป็นสิ่งจำเป็นเราจึงคิดถึงประโยชน์ของการทำให้เป็นอนุกรม Java ผลประโยชน์คือประการแรกที่การคงอยู่ของข้อมูลเป็นจริง ผ่านการทำให้เป็นอนุกรมข้อมูลสามารถบันทึกได้อย่างถาวรบนฮาร์ดดิสก์ (โดยปกติจะเก็บไว้ในไฟล์) ประการที่สองการทำให้เป็นอนุกรมใช้เพื่อตระหนักถึงการสื่อสารระยะไกลนั่นคือส่งลำดับไบต์ของวัตถุบนเครือข่าย
3. ตัวอย่าง:
(1) Serialize และ Deserialize ไฟล์:
นำเข้า Java.io.*; @suppresswarnings ("อนุกรม") คนในชั้นเรียนใช้ serializable {บุคคลสาธารณะ (ชื่อสตริง, เพศสตริง, อายุ int, ความสูง int) {this.name = name; this.sex = เพศ; this.age = อายุ; this.height = ความสูง; } สตริงสาธารณะ toString () {return "|" + this.name + "|" + this.sex + "|" + this.age + "|" + this.height + "|"; } ชื่อสตริงสาธารณะ; Sex String สาธารณะ; อายุ int สาธารณะ; ความสูง int สาธารณะ; } คลาสสาธารณะ serialtest {โมฆะสาธารณะคงที่หลัก (สตริง [] args) พ่น filenotfoundexception, ioexception, classnotfoundexception {person p = บุคคลใหม่ ("jim", "ชาย", 28, 194); // เริ่มการทำให้เป็นอนุกรม ObjectOutputStream OOS = ใหม่ ObjectOutputStream (ใหม่ fileOutputStream (ไฟล์ใหม่ ("mytest.txt")))); oos.writeObject (p); // deserialize ObjectInputStream OIS = ใหม่ ObjectInputStream (ใหม่ FileInputStream (ไฟล์ใหม่ ("mytest.txt")))); บุคคล p1 = (บุคคล) ois.readobject (); System.out.println (P1.ToString ()); -
(2) XML deserialization ในชั้นเรียน:
นำเข้า Java.io.*; นำเข้า com.thoughtworks.xstream.xstream; นำเข้า com.thoughtworks.xstream.io.xml.domdriver; @suppresswarnings ("อนุกรม") คลาส Roadinfo ใช้ serializable {public int id; Public Long MDN; ชื่อสตริงสาธารณะ; LNG สาธารณะสองครั้ง; ลัตสองครั้งสาธารณะ; ไอคอนสตริงสาธารณะ } @suppresswarnings ("serial") คลาส table_list ใช้ serializable {public String toString () {StringBuffer sb = new StringBuffer (); สำหรับ (Roadinfo r: sequence) {sb.append ("|"); SB.Append (R.ID); sb.append ("|"); sb.append (r.mdn); sb.append ("|"); SB.Append (R.Name); sb.append ("|"); sb.append (r.lng); sb.append ("|"); sb.append (r.lat); sb.append ("|"); SB.Append (R.ICON); sb.append ("|/n"); } return sb.toString (); } Public Table_list (จำนวน int) {sequence = ใหม่ roadinfo [count]; สำหรับ (int i = 0; i <count; i ++) {sequence [i] = new RoadInfo (); }} public RoadInfo [] ลำดับ; } คลาสสาธารณะ xmltest { / ** * @param args * / โมฆะคงที่สาธารณะหลัก (String [] args) โยนข้อยกเว้น {// todo วิธีการที่สร้างขึ้นอัตโนมัติ stub StringBuffer SB = new StringBuffer (); bufferedReader reader = ใหม่ bufferedReader (filereader ใหม่ (ไฟล์ใหม่ ("friend_msg.xml"))); ในขณะที่ (จริง) {string s = reader.readline (); // อ่านบรรทัดถ้า (s == null) {break; } sb.append (s); } xstream xs = ใหม่ xstream (ใหม่ domdriver ()); table_list db = (table_list) xs.fromxml (sb.toString ()); System.out.println (db.toString ()); -