ฉันได้อ่านบทความจำนวนมากเกี่ยวกับ Serialization และวิธีการที่ดีและยอดเยี่ยม แต่ไม่มีข้อโต้แย้งใดที่น่าเชื่อเพียงพอ ฉันสงสัยว่าจะมีใครบอกฉันได้จริง ๆ ว่าอะไรคือสิ่งที่เราสามารถบรรลุได้จากการจัดลำดับชั้นเรียน?
ฉันได้อ่านบทความจำนวนมากเกี่ยวกับ Serialization และวิธีการที่ดีและยอดเยี่ยม แต่ไม่มีข้อโต้แย้งใดที่น่าเชื่อเพียงพอ ฉันสงสัยว่าจะมีใครบอกฉันได้จริง ๆ ว่าอะไรคือสิ่งที่เราสามารถบรรลุได้จากการจัดลำดับชั้นเรียน?
คำตอบ:
มากำหนดอนุกรมกันก่อนจากนั้นเราจะพูดถึงสาเหตุที่มีประโยชน์
Serialization เป็นเพียงการเปลี่ยนวัตถุที่มีอยู่ให้เป็นอาร์เรย์ไบต์ อาร์เรย์ไบต์นี้แสดงถึงคลาสของอ็อบเจ็กต์เวอร์ชันของอ็อบเจ็กต์และสถานะภายในของอ็อบเจ็กต์ จากนั้นอาร์เรย์ไบต์นี้สามารถใช้ระหว่าง JVM ที่ใช้รหัสเดียวกันเพื่อส่ง / อ่านวัตถุ
ทำไมเราถึงต้องการทำเช่นนี้?
มีสาเหตุหลายประการ:
การสื่อสาร: หากคุณมีเครื่องสองเครื่องที่ใช้รหัสเดียวกันและจำเป็นต้องสื่อสารกันวิธีง่ายๆคือให้เครื่องหนึ่งสร้างวัตถุที่มีข้อมูลที่ต้องการส่งจากนั้นจึงจัดลำดับวัตถุนั้นกับเครื่องอื่น ไม่ใช่วิธีการสื่อสารที่ดีที่สุด แต่จะทำให้งานสำเร็จลุล่วง
ความคงอยู่: หากคุณต้องการจัดเก็บสถานะของการดำเนินการเฉพาะในฐานข้อมูลสามารถต่ออนุกรมกับอาร์เรย์ไบต์ได้อย่างง่ายดายและจัดเก็บไว้ในฐานข้อมูลเพื่อเรียกคืนในภายหลัง
คัดลอกลึก: หากคุณต้องการที่แน่นอนแบบจำลองของวัตถุและไม่ต้องการที่จะไปที่ปัญหาของการเขียนโคลนเฉพาะ () ระดับของคุณเองเพียง serializing วัตถุที่แถว byte แล้ว de-serializing ไปที่อื่น วัตถุบรรลุเป้าหมายนี้
การแคช: เป็นเพียงแอปพลิเคชันข้างต้น แต่บางครั้งวัตถุใช้เวลาสร้าง 10 นาที แต่จะใช้เวลาเพียง 10 วินาทีในการยกเลิกการทำให้เป็นอนุกรม ดังนั้นแทนที่จะยึดวัตถุขนาดใหญ่ไว้ในหน่วยความจำเพียงแค่แคชมันลงในไฟล์ผ่านการทำให้เป็นอนุกรมและอ่านในภายหลังเมื่อจำเป็น
การซิงโครไนซ์ข้าม JVM: การทำให้เป็นอนุกรมทำงานกับ JVM ที่แตกต่างกันซึ่งอาจทำงานบนสถาปัตยกรรมที่แตกต่างกัน
ในขณะที่คุณเรียกใช้แอปพลิเคชันของคุณวัตถุทั้งหมดจะถูกเก็บไว้ในหน่วยความจำ (RAM) เมื่อคุณออกหน่วยความจำนั้นจะถูกเรียกคืนโดยระบบปฏิบัติการและโปรแกรมของคุณจะ 'ลืม' ทุกสิ่งที่เกิดขึ้นในขณะที่กำลังทำงานอยู่ การทำให้เป็นอนุกรมจะแก้ไขได้โดยให้แอปพลิเคชันของคุณบันทึกวัตถุลงในดิสก์เพื่อให้สามารถอ่านย้อนหลังได้ในครั้งต่อไปที่เริ่มต้น หากแอปพลิเคชันของคุณกำลังจะจัดเตรียมวิธีการบันทึก / แบ่งปันสถานะก่อนหน้านี้คุณจะต้องมีการจัดลำดับรูปแบบบางรูปแบบ
ฉันสามารถแบ่งปันเรื่องราวของฉันและฉันหวังว่ามันจะให้แนวคิดบางอย่างว่าทำไมการทำให้เป็นอนุกรมจึงจำเป็น อย่างไรก็ตามคำตอบสำหรับคำถามของคุณมีรายละเอียดที่น่าทึ่งอยู่แล้ว
ฉันมีหลายโปรเจ็กต์ที่ต้องโหลดและอ่านไฟล์ข้อความจำนวนมาก ไฟล์มีคำหยุดคำกริยาทางชีวการแพทย์คำย่อทางชีวการแพทย์คำที่เชื่อมโยงกันทางความหมาย ฯลฯ เนื้อหาของไฟล์เหล่านี้ง่ายมาก: คำ !
ตอนนี้สำหรับแต่ละโครงการฉันต้องอ่านคำจากแต่ละไฟล์เหล่านี้และใส่ลงในอาร์เรย์ที่แตกต่างกัน เนื่องจากเนื้อหาของไฟล์ไม่เคยเปลี่ยนแปลงจึงกลายเป็นงานทั่วไป แต่ซ้ำซ้อนหลังจากโครงการแรก
ดังนั้นสิ่งที่ฉันทำคือฉันสร้างวัตถุขึ้นมาเพื่ออ่านแต่ละไฟล์เหล่านี้และเติมข้อมูลแต่ละอาร์เรย์ (ตัวแปรเช่นของวัตถุ) จากนั้นฉันก็ทำให้วัตถุเป็นลำดับแล้วสำหรับโครงการต่อมา ฉันไม่ต้องอ่านไฟล์และเติมอาร์เรย์ซ้ำแล้วซ้ำอีก
การทำให้เป็นอนุกรมคือกระบวนการแปลงชุดของอินสแตนซ์ออบเจ็กต์ที่มีการอ้างอิงซึ่งกันและกันเป็นสตรีมเชิงเส้นของไบต์ซึ่งสามารถส่งผ่านซ็อกเก็ตจัดเก็บไปยังไฟล์หรือเพียงแค่จัดการเป็นสตรีมข้อมูล
ดูการใช้งานจากWiki :
การทำให้เป็นอนุกรมมีข้อดีหลายประการ ให้:
- วิธีการคงอยู่ของอ็อบเจ็กต์ซึ่งสะดวกกว่าการเขียนคุณสมบัติลงในไฟล์ข้อความบนดิสก์และนำมาประกอบใหม่โดยอ่านสิ่งนี้กลับเข้ามา
- วิธีการออกการเรียกโพรซีเดอร์ระยะไกลเช่นใน SOAP
- วิธีการกระจายวัตถุโดยเฉพาะอย่างยิ่งในส่วนประกอบของซอฟต์แวร์เช่น COM, CORBA เป็นต้น
- วิธีการตรวจจับการเปลี่ยนแปลงของข้อมูลที่แปรตามเวลา
ที่ชัดเจนที่สุดคือคุณสามารถส่งคลาสซีเรียลไลซ์ผ่านเครือข่ายได้และผู้รับสามารถสร้างอินสแตนซ์เดิมที่ซ้ำกันได้ ในทำนองเดียวกันคุณสามารถบันทึกโครงสร้างอนุกรมลงในระบบไฟล์
นอกจากนี้โปรดทราบว่าการทำให้เป็นอนุกรมเป็นแบบวนซ้ำดังนั้นคุณสามารถจัดลำดับโครงสร้างข้อมูลที่แตกต่างกันทั้งหมดให้เป็นอนุกรมได้หากต้องการ
อ็อบเจ็กต์ที่ต่อเนื่องจะรักษาสถานะในอวกาศสามารถถ่ายโอนผ่านเครือข่ายระบบไฟล์ ฯลฯ ... และเวลาพวกมันสามารถอยู่ได้นานกว่า JVM ที่สร้างขึ้น
บางครั้งสิ่งนี้ก็มีประโยชน์
ฉันใช้อ็อบเจ็กต์ที่ทำให้เป็นอนุกรมเพื่อสร้างมาตรฐานของอาร์กิวเมนต์ที่ฉันส่งผ่านไปยังฟังก์ชันหรือตัวสร้างคลาส การส่งถั่วที่ทำให้เป็นอนุกรมหนึ่งรายการนั้นสะอาดกว่าอาร์กิวเมนต์แบบยาวมาก ผลลัพธ์คือโค้ดที่อ่านและแก้ไขจุดบกพร่องได้ง่ายขึ้น
เพื่อจุดประสงค์ในการเรียนรู้ง่ายๆ (สังเกตนะว่าการเรียนรู้ฉันไม่ได้บอกว่าดีที่สุดหรือดี แต่เพื่อประโยชน์ในการทำความเข้าใจ) คุณสามารถบันทึกข้อมูลของคุณลงในไฟล์ข้อความบนคอมพิวเตอร์จากนั้นมีโปรแกรม ที่อ่านข้อมูลนั้นและตามไฟล์คุณอาจมีโปรแกรมตอบสนองแตกต่างกันไป หากคุณก้าวหน้ากว่านี้ไม่จำเป็นต้องเป็นไฟล์ txt แต่เป็นอย่างอื่น
ในทางกลับกันการทำให้เป็นอนุกรมทำให้สิ่งต่าง ๆ เป็นภาษาคอมพิวเตอร์โดยตรง เหมือนกับว่าคุณกำลังเล่าเรื่องคอมพิวเตอร์ภาษาสเปนเป็นภาษาสเปนแทนที่จะบอกเป็นภาษาฝรั่งเศสบังคับให้เรียนภาษาฝรั่งเศสจากนั้นบันทึกสิ่งต่างๆเป็นภาษาสเปนโดยการแปลทุกอย่าง ไม่ใช่คำตอบที่เน้นเทคโนโลยีมากที่สุดฉันแค่พยายามสร้างตัวอย่างที่เข้าใจได้ในรูปแบบภาษาทั่วไป
การทำให้เป็นอนุกรมนั้นเร็วกว่าเช่นกันเนื่องจากใน Java วัตถุจะถูกจัดการบนฮีปและใช้เวลานานกว่าการแสดงเป็นแบบดั้งเดิมบนสแต็ก ความเร็วความเร็วความเร็ว และการประมวลผลไฟล์น้อยลงจากมุมมองของโปรแกรมเมอร์