การทำให้เป็นอันดับใน Java: ทุกสิ่งที่คุณต้องการรู้ [2022]
เผยแพร่แล้ว: 2021-01-04ด้วยการเติบโตของอุตสาหกรรมไอทีที่เพิ่มขึ้นเรื่อยๆ ความเชื่อมั่นของเราในเรื่องนี้จึงเพิ่มขึ้นทุกวันที่ผ่านไป การเติบโตอย่างต่อเนื่องนี้ได้ผลักดันให้คนทำงานจำนวนมากต้องใช้ภาษาโปรแกรมเพื่อให้มีความเกี่ยวข้องในอุตสาหกรรม แม้ว่าอุตสาหกรรมนี้จะใช้หลายภาษาเพื่อให้บริการแก่ลูกค้า แต่ก็มีบางภาษาที่ใช้บ่อยกว่าภาษาอื่นๆ Java เป็นหนึ่งในภาษาดังกล่าว
ไม่ว่าคุณจะเป็นมือใหม่หรือมือเก๋า ความรู้ด้าน Java ที่ดีจะเป็นประโยชน์ต่อคุณในทุกช่วงของการเดินทางด้วยซอฟต์แวร์ของคุณ เช่นเดียวกับภาษาการเขียนโปรแกรมอื่น ๆ Java ยังมีหลักสูตรที่ครอบคลุมเป็นของตัวเอง เราต้องฝึกภาษาทุกวันเพื่อให้ได้แนวคิดต่างๆ ทั้งหมดที่คั่นระหว่างภาษา แนวคิดหนึ่งที่ช่วยผู้ใช้ได้มากคือการฝึกฝนการทำให้เป็นอนุกรมใน Java
สารบัญ
บทนำ
การทำให้เป็นอันดับในบริบทของ Java หมายถึงกระบวนการที่อ็อบเจ็กต์โค้ด Java ถูกแปลงเป็น Byte Stream อย่างเป็นระบบ สิ่งนี้ทำเพื่อเปิดใช้งานการถ่ายโอนโค้ดอ็อบเจ็กต์ดังกล่าวจากเครื่องเสมือน Java เครื่องหนึ่งไปยังอีกเครื่องหนึ่งอย่างมีประสิทธิภาพ ต่อจากนี้ จะทำให้นันทนาการได้โดยใช้ดีซีเรียลไลเซชัน เราใช้การทำให้เป็นอนุกรมเพื่อตอบสนองวัตถุประสงค์หลายประการ มาดูรายการยอดนิยมและเกี่ยวข้องกันในหัวข้อด้านล่างกัน
เหตุใดจึงใช้การทำให้เป็นอนุกรม
ปรากฏการณ์ของการแสดงวัตถุเป็นลำดับของไบต์มีส่วนแบ่งการใช้งานที่เหมาะสมภายในกระบวนทัศน์การเขียนโปรแกรม เมื่อกระบวนการขยายตัวเองเพื่อแสดงข้อมูลของวัตถุด้วย ยูทิลิตี้จะเพิ่มขึ้นหลายเท่า รายการด้านล่างคือการใช้งานซีเรียลไลซ์เซชั่นทั่วไปบางส่วนใน Java
การสื่อสาร
Serialization ใน Java ช่วยให้สามารถสื่อสารระหว่างระบบคอมพิวเตอร์หลายเครื่องได้อย่างมีประสิทธิภาพและรวดเร็ว หน่วยเหล่านี้ใช้ประโยชน์จากการทำให้เป็นอนุกรมของอ็อบเจ็กต์และการส่งผ่านเพื่ออำนวยความสะดวกในการแบ่งปันและการออกแบบอ็อบเจ็กต์ต่างๆ พร้อมกัน ส่งผลให้การดำเนินการในท้ายที่สุดเป็นไปอย่างราบรื่นเช่นกัน ในกรณีของฐานข้อมูลจำนวนมาก การทำให้เป็นอนุกรมช่วยให้มีวิธีการที่คล่องตัวในการจัดการวัตถุ
เก็บเอาไว้
ในความหมายกว้างๆ แคชหมายถึงวิธีการจัดเก็บข้อมูลเพื่อเข้าถึงในภายหลัง โดยใช้เวลาน้อยที่สุดกับข้อมูลนั้น การทำให้เป็นอันดับใน Java พร้อมต์แคชโดยการลดเวลาที่ใช้ในการดีซีเรียลไลซ์วัตถุขนาดใหญ่ เป็นที่ทราบกันทั่วไปว่าเวลาที่ใช้ในการสร้างวัตถุนั้นมากกว่าเมื่อเปรียบเทียบกับเวลาที่ใช้ในการดีซีเรียลไลเซชัน ดังนั้น การทำให้เป็นอันดับช่วยในการเพิ่มประสิทธิภาพการใช้เวลานี้ โดยการแคชอ็อบเจ็กต์ที่ค่อนข้างใหญ่กว่าในการผสม

สำเนาลึก
Deep copy ใน Java หมายถึงกระบวนการคัดลอกอ็อบเจ็กต์จากทรีในลักษณะที่ไม่ขึ้นอยู่กับเวอร์ชันก่อนๆ ที่อาจมีการเปลี่ยนแปลงในระดับหนึ่ง กระบวนการโคลนนี้ทำได้ง่ายขึ้นมากโดยใช้การทำให้เป็นอนุกรม โดยการทำให้วัตถุเป็นอนุกรมเป็นไบต์อาร์เรย์แล้วทำการดีซีเรียลไลซ์วัตถุในภายหลัง ผู้ใช้สามารถบรรลุแบบจำลองของวัตถุดังกล่าวได้
การซิงโครไนซ์เครื่องเสมือนข้าม Java
ข้อได้เปรียบหลักของการฝึกซีเรียลไลเซชันคือทำให้ผู้ใช้สามารถทำงานใน JVM ต่างๆ ได้ เมื่อมีการใช้การทำให้เป็นอนุกรมแล้ว ไม่สำคัญว่า JVM เหล่านี้ทำงานบนสถาปัตยกรรมและระบบปฏิบัติการเดียวกันหรือต่างกันหรือไม่
วิริยะ
เมื่อใช้การทำให้เป็นอนุกรมกับวัตถุ เราสามารถจัดเก็บสถานะของรายการได้โดยตรงโดยไม่เกิดความไม่สะดวกใดๆ นอกจากนี้ยังช่วยให้ผู้ใช้บันทึกสถานะดังกล่าวในฐานข้อมูลที่สามารถเรียกข้อมูลในภายหลังได้ตลอดเวลาในอนาคต
อ่าน: คำถามและคำตอบสัมภาษณ์ Java Serialization
การทำให้เป็นอันดับวัตถุ- กระบวนการที่เกี่ยวข้อง
ก่อนที่จะดำเนินการซีเรียลไลซ์อ็อบเจ็กต์ อันดับแรก เราต้องพิจารณาก่อนว่าอ็อบเจกต์นั้นสามารถซีเรียลไลซ์ได้หรือไม่ตั้งแต่แรก ทีนี้ เราจะทราบได้อย่างไรว่า อ็อบเจ็กต์ใน Java สามารถซีเรียลไลซ์ได้ก็ต่อเมื่อคลาสหรือคลาสพาเรนต์ใดๆ อนุญาตให้ใช้งานอินเตอร์เฟส java.io.Serializable นอกจากนี้ยังตรงตามเกณฑ์หากคลาสเหล่านี้ใช้อินเทอร์เฟซย่อยด้วย ซึ่งก็คือ java.io.Externalizable
ดังที่กล่าวไว้ข้างต้น การซิงโครไนซ์ข้าม JVM เป็นหนึ่งในแอปพลิเคชั่นที่มีศักยภาพมากที่สุดของการใช้การทำให้เป็นอนุกรม เมื่อเราทำให้วัตถุเป็นอนุกรม เราจะแปลงสถานะของวัตถุนี้เป็นสตรีมแบบไบต์ ส่งผลให้เราสามารถถ่ายโอนอ็อบเจ็กต์จาก Java Virtual Machine หนึ่งไปยังอีกเครื่องหนึ่งได้ ดังนั้น ไบต์สตรีมนี้สามารถแปลงกลับเป็นอ็อบเจ็กต์ดั้งเดิมได้เช่นกัน
การแปลงนี้เรียกอีกอย่างว่าดีซีเรียลไลเซชัน เป็นกระบวนการย้อนกลับของการทำให้เป็นอนุกรม ซึ่งไบต์สตรีมของอ็อบเจ็กต์จากผู้ส่งที่ได้รับการซีเรียลไลซ์ก่อนหน้านี้จะถูกสร้างขึ้นใหม่ที่จุดสิ้นสุดการรับ
ข้อดีของการทำให้เป็นอันดับใน Java
ในการอภิปรายเกี่ยวกับการใช้และการประยุกต์ใช้การทำให้เป็นอนุกรมในหัวข้อก่อนหน้านี้ เราได้ให้ความกระจ่างถึงข้อดีหลายประการแล้ว ถึงเวลาแล้วที่จะดำดิ่งลึกลงไปในพวกเขา
- ข้อดีที่สำคัญที่สุดประการหนึ่งของการทำให้เป็นอันดับคือความจริงที่ว่ามันเป็นคุณสมบัติในตัว ในการใช้งานหรือดำเนินการซีเรียลไลซ์เซชั่น คุณไม่จำเป็นต้องขอความช่วยเหลือจากซอฟต์แวร์ของบริษัทอื่น
- แม้แต่สำหรับผู้ใช้ที่เริ่มต้นและเพิ่งเรียนรู้เชือก การทำให้เป็นอนุกรมก็เป็นกระบวนการที่ค่อนข้างง่ายในการเรียนรู้และทำความเข้าใจ
- บ่อยครั้งที่นักพัฒนาซอฟต์แวร์ที่มาจากภูมิหลังการเขียนโปรแกรมที่แตกต่างกันจะได้รับพื้นหลังที่สัมผัสได้เมื่อพวกเขาต้องจัดการกับความแตกต่างของภาษาใหม่ อย่างไรก็ตาม ในกรณีของการทำให้เป็นอันดับ กระบวนการนี้เป็นสากลและด้วยเหตุนี้จึงค่อนข้างคุ้นเคยกับนักพัฒนาทั้งหมดที่นั่น
- ไม่เพียงแต่จะใช้งานง่ายและปรับใช้เท่านั้น แต่ยังปรับแต่งได้ง่ายไม่แพ้กันอีกด้วย
- ในปัจจุบัน มีเทคโนโลยีที่สำคัญหลายอย่างที่ใช้ประโยชน์จากการทำให้เป็นอนุกรมในการดำเนินงาน เนื่องจากสตรีมข้อมูลที่ต่อเนื่องกันนั้นรองรับการเข้ารหัส การรับรองความถูกต้อง การบีบอัด และการประมวลผลจาวาที่ปลอดภัย
ข้อเสียของการทำให้เป็นอันดับใน Java
ไม่มีภาษาโปรแกรมใดที่สมบูรณ์แบบร้อยเปอร์เซ็นต์ และพวกเขาไม่สามารถอ้างได้ว่าเป็นเช่นนั้น ด้วยเหตุนี้ แนวความคิดและกระบวนการที่ประกอบขึ้นเป็นองค์ประกอบจึงไม่มีข้อบกพร่องของตนเองเช่นกัน ต่อไปนี้คือข้อเสียบางประการที่เกี่ยวข้องกับกระบวนการซีเรียลไลซ์เซชัน
- กระบวนการซีเรียลไลซ์เซชั่นบางอย่างต้องการการดีซีเรียลไลเซชั่นเพื่อนำไปใช้ควบคู่กันเช่นกัน ข้อเสียของการใช้ดีซีเรียลไลเซชันคือทำให้วัตถุเปราะ ด้วยเหตุนี้ จึงไม่มีความแน่นอนอย่างสมบูรณ์ว่าวัตถุดังกล่าวจะได้รับการดีซีเรียลไลซ์อย่างมีประสิทธิผล
- เมื่อกระบวนการซีเรียลไลซ์เซชั่นถูกเรียกใช้ มันจะทำให้เกิดการสร้างกลุ่มของตัวแปรชั่วคราว เมื่อสร้างตัวแปรชั่วคราวเหล่านี้ จะใช้พื้นที่หน่วยความจำเพิ่มเติม อย่างไรก็ตาม ตัวแปรชั่วคราวเหล่านี้จำนวนมากไม่สามารถเริ่มต้นได้ เนื่องจากไม่มีการเรียกตัวสร้างในระหว่างกระบวนการเหล่านี้ ต่อจากนั้นก็ส่งผลต่อการเปลี่ยนแปลงของ Standard Java Flow
- สำหรับการเพิ่มประสิทธิภาพการใช้เวลาทั้งหมด กระบวนการซีเรียลไลซ์เซชันจะไม่มีประสิทธิภาพมากขึ้นเมื่อใช้หน่วยความจำ
- กระบวนการซีเรียลไลซ์เซชั่นไม่มีกลไกควบคุมการเปลี่ยนใด ๆ ต่อ Java Standard Edition ทุกเวอร์ชัน ด้วยเหตุนี้ จึงไม่แนะนำให้ใช้ร่วมกับแอปพลิเคชันที่ต้องการการเข้าถึงแบบขนานโดยไม่ต้องใช้ API ของบุคคลที่สาม
- ในขณะที่ใช้การทำให้เป็นอนุกรม มักต้องประนีประนอมกับการควบคุมที่ละเอียดเพื่อเข้าถึงออบเจกต์
Serialization เมื่อมองผ่านเลนส์ที่ใช้งานได้จริง
จนถึงตอนนี้ เราได้กล่าวถึงกระบวนการของการทำให้เป็นอันดับเป็นแนวคิดทางทฤษฎี ซึ่งรวมถึงข้อดีและข้อเสียต่างๆ ถึงเวลาแล้วที่จะเจาะลึกในการอภิปรายที่ช่วยให้เราเห็นภาพการซีเรียลไลซ์เซชั่นจากมุมมองเชิงปฏิบัติและการนำไปปฏิบัติ ด้านล่างนี้คือบางกรณีที่ช่วยให้เราเข้าใจถึงการปฏิบัติจริงของการซีเรียลไลซ์เซชั่น

ต้องอ่าน: คุณสมบัติและประโยชน์ของ JavaBeans: คุณควรใช้อย่างไร?
การทำให้เป็นอนุกรมและการสืบทอด
การสืบทอดใน Java ถูกกำหนดอย่างกว้างๆ เป็นปรากฏการณ์ที่คลาสหนึ่งได้มาหรือสืบทอดเมธอดและฟิลด์ของคลาสอื่น คลาสที่สืบทอดคุณสมบัติจะเรียกว่าคลาสย่อย และคลาสที่มีคุณสมบัติที่สืบทอดมาจะเรียกว่าซูเปอร์คลาส คำว่าซูเปอร์คลาสยังใช้แทนกันได้กับคลาสฐานและคลาสพาเรนต์
กรณีแรกของเราเกี่ยวข้องกับการทำให้เป็นอันดับในบริบทของซูเปอร์คลาส โดยทั่วไป ถ้าซูเปอร์คลาสเป็นแบบซีเรียลไลซ์ได้ คลาสย่อยของมันสามารถถูกพิจารณาว่าทำให้ซีเรียลไลซ์ได้ตามค่าเริ่มต้น แน่นอนว่าสิ่งนี้จะเป็นจริงก็ต่อเมื่อซูเปอร์คลาสกำลังใช้งานอินเตอร์เฟส Serializable อย่างไรก็ตาม ยังมีบางกรณีที่คลาสย่อยสามารถทำให้เป็นอนุกรมได้ แม้ว่าซูเปอร์คลาสจะไม่ใช้อินเตอร์เฟส Serializable
สิ่งนี้เกิดขึ้นเมื่อคลาสย่อยจัดการเพื่อใช้อินเตอร์เฟส Serializable ในความจุเดียว หากซูเปอร์คลาสล้มเหลวในการใช้อินเตอร์เฟส Serializable ไม่ว่าในกรณีใด ๆ อ็อบเจ็กต์ของคลาสย่อยสามารถซีเรียลไลซ์ด้วยตนเองได้เมื่อคลาสย่อยใช้อินเตอร์เฟสซีเรียลไลซ์ได้
ในบางครั้ง ผู้ใช้อาจพบความเป็นไปได้ที่สามเช่นกัน ความเป็นไปได้นี้เกิดขึ้นเมื่อซูเปอร์คลาสเป็นแบบซีเรียลไลซ์ได้ แต่ผู้ใช้ไม่จำเป็นต้องนำกระบวนการนี้ไปใช้กับคลาสย่อย
ในสถานการณ์เช่นนี้ มีหลายวิธีที่สามารถป้องกันการทำให้เป็นอนุกรมของคลาสย่อยที่ไม่ต้องการได้ สิ่งนี้สามารถทำได้โดยใช้เมธอด writeObject() และ readObject() ในคลาสย่อย อย่างไรก็ตาม การใช้วิธีการเหล่านี้เพียงอย่างเดียวไม่เพียงพอ นอกจากการเขียนเมธอดเหล่านี้แล้ว ผู้ใช้ยังต้องแน่ใจว่าเมธอดดังกล่าวไม่ทิ้ง NotSerializableException จากการใช้งาน
การทำให้เป็นอันดับด้วยความช่วยเหลือของสมาชิกแบบคงที่
เมื่อมีการใช้กระบวนการซีเรียลไลซ์เซชั่น มันจะจบลงด้วยการเพิกเฉยต่อสมาชิกของฟิลด์สแตติกในกระบวนการ สาเหตุหลักมาจากการทำให้เป็นอันดับเป็นขั้นตอนส่วนใหญ่เกี่ยวข้องกับสถานะล่าสุดของวัตถุที่เป็นปัญหา เป็นผลให้ในขณะที่ข้อมูลที่เกี่ยวข้องกับอินสแตนซ์เฉพาะของคลาสถูกทำให้เป็นอนุกรมสำเร็จ แต่ฟิลด์สมาชิกแบบคงที่ที่เกี่ยวข้องกับข้อมูลนั้นจะไม่เป็นเช่นนั้น
การทำให้เป็นอันดับที่เกี่ยวข้องกับเอกสาร XML
การทำให้เป็นอนุกรมของวัตถุ Java เป็น XML สามารถทำได้หลายวิธี ในขั้นต้นพวกเขาจะรับรู้ด้วยความช่วยเหลือของ XMLEncoder และ XMLDecoder เป้าหมายหลักของการทำให้เป็นอนุกรมของวัตถุ Java ของ Java ไปยังเอกสาร XML คือการพยายามจำกัดข้อเสียต่างๆ ที่กระบวนการทำให้เป็นอนุกรมมีขึ้นโดยธรรมชาติ
ปัญหาที่เกี่ยวข้องมากที่สุดอย่างหนึ่งในกระบวนการซีเรียลไลซ์เซชั่นคือตรรกะที่บันทึกและกู้คืนอ็อบเจ็กต์ที่ทำให้เป็นอนุกรมนั้นขึ้นอยู่กับโครงสร้างภายในของคลาสที่เป็นส่วนประกอบเท่านั้น ไม่ได้คำนึงถึงการเปลี่ยนแปลงใด ๆ ที่อาจเกิดขึ้นกับคลาสเหล่านั้นในเวลาที่หมดไประหว่างการบันทึกวัตถุและการเรียกข้อมูล ต่อจากนั้น ส่งผลให้เกิดความล้มเหลวของกระบวนการดีซีเรียลไลเซชันที่ใกล้จะเกิดขึ้น
การทำให้เป็นอนุกรมทำให้เกิดปัญหาในการกำหนดเวอร์ชันเช่นกัน สิ่งนี้เกิดขึ้นเมื่อผู้ใช้บันทึกอ็อบเจ็กต์โดยใช้คลาสเวอร์ชันเดียว แต่พยายามดีซีเรียลไลซ์คลาสเดียวกันโดยใช้คลาสเวอร์ชันอื่นหรือเวอร์ชันใหม่ ในกรณีนี้ กระบวนการดีซีเรียลไลเซชันก็ล้มเหลวเช่นกัน
ดังนั้น เพื่อหลีกเลี่ยงปัญหาเหล่านี้ ผู้ใช้บางคนชอบการทำให้วัตถุเป็นอนุกรมกับเอกสาร XML มากกว่าที่จะใช้วิธีปกติในการทำให้เป็นอนุกรมกับรูปแบบไบนารี นอกจากนี้ การจัดลำดับอ็อบเจ็กต์ Java ลงในเอกสาร XML ยังช่วยให้มั่นใจว่าอ็อบเจ็กต์นั้นมนุษย์สามารถอ่านได้ ดังนั้นจึงอำนวยความสะดวกในระดับที่เหนือกว่า
ชำระเงิน: คำถามและคำตอบสัมภาษณ์ Java
ทำความเข้าใจกับ Externalizable Interface
อินเทอร์เฟซ Externalizable ใน Java ค่อนข้างคล้ายกับอินเทอร์เฟซการทำให้เป็นอนุกรม ความแตกต่างอยู่ที่ความสามารถของพวกเขาในการนำเสนอซีเรียลไลซ์เซชั่นแบบกำหนดเอง อินเทอร์เฟซภายนอกช่วยให้คุณมีตัวเลือกในการเลือกอ็อบเจ็กต์ที่คุณต้องการจัดเก็บไว้ในสตรีม ในขณะที่อินเทอร์เฟซการทำให้เป็นอนุกรมไม่ได้ให้สิทธิ์แบบเดียวกันแก่คุณ
สามารถใช้อินเทอร์เฟซภายนอกได้ภายใต้ java.io อินเทอร์เฟซภายนอกทำให้ผู้ใช้มีสองวิธีเช่นกัน อันแรกเป็นโมฆะสาธารณะ writeExternal(ObjectOutput out) พ่น IOException อีกอันหนึ่งเป็นโมฆะสาธารณะ readExternal(ObjectOutput in) พ่น IOException
ความแตกต่างระหว่างการทำให้เป็นอันดับและการทำให้เป็นภายนอก
นอกเหนือจากความสามารถของพวกเขาในการเสนอการทำให้เป็นอนุกรมแบบกำหนดเองแล้ว ตัวแปรสำคัญอื่นๆ บางตัวยังทำให้การซีเรียลไลซ์เซชั่นและการทำให้เป็นภายนอกแยกจากกันอีกด้วย ส่วนต่อไปนี้จะพิจารณาพวกเขาอย่างใกล้ชิด
การดำเนินการ
ความแตกต่างที่สำคัญประการหนึ่งระหว่างอินเทอร์เฟซซีเรียลไลซ์ได้และอินเตอร์เฟสภายนอกนั้นอยู่ในการใช้งาน อินเทอร์เฟซภายนอกได้คาดหวังให้ผู้ใช้กล่าวถึงวัตถุที่พวกเขาต้องการให้เป็นอนุกรมอย่างชัดเจน นี่ไม่ใช่กรณีที่มีการจัดการกับอินเทอร์เฟซที่ทำให้ซีเรียลไลซ์ได้ ในอินเทอร์เฟซแบบซีเรียลไลซ์ได้ อ็อบเจ็กต์และตัวแปรทั้งหมดจะถูกทำให้เป็นอนุกรม โดยไม่มีความแตกต่างใดๆ ในระหว่างรันไทม์
วิธีการ
อินเทอร์เฟซ Externalizable ส่วนใหญ่ประกอบด้วยสองวิธี นี่คือเมธอด writeExternal() และเมธอด readExternal() ในทางกลับกัน อินเทอร์เฟซแบบซีเรียลไลซ์ได้ไม่ประกอบด้วยวิธีการใดๆ ทั้งสิ้น
กระบวนการ
เมื่อดำเนินการตามกระบวนการซีเรียลไลซ์เซชั่นในอินเทอร์เฟซภายนอก พวกเขาจะได้รับสิทธิพิเศษในการทำให้เป็นอันดับที่กำหนดเอง ในขณะที่อินเทอร์เฟซซีเรียลไลซ์ได้นั้นขึ้นอยู่กับกระบวนการซีเรียลไลซ์เริ่มต้น
ความเข้ากันได้ย้อนหลังและการควบคุม
Externalizable Interface รองรับการทำให้เป็นอันดับโดยไม่ต้องจองกับการควบคุมเวอร์ชันที่เป็นปัญหา ปัญหาเดียวของวิธีนี้คือ ผู้ใช้ต้องรับผิดชอบตัวเองในขณะที่จัดลำดับซูเปอร์คลาส ในทางตรงกันข้าม อินเทอร์เฟซการทำให้เป็นอันดับต้องการให้ JVM เวอร์ชันเดียวกันปรากฏที่ปลายทั้งสองข้าง อย่างไรก็ตาม อนุญาตให้มีการจัดลำดับเริ่มต้นของอ็อบเจ็กต์และคลาสทั้งหมด รวมถึงซูเปอร์คลาสด้วย
ตัวสร้าง No-Arg สาธารณะ
ขณะสร้างอ็อบเจ็กต์ซีเรียลไลซ์ขึ้นใหม่ อินเตอร์เฟสภายนอกต้องการการใช้คอนสตรัคเตอร์ที่ไม่มีอาร์กสาธารณะ สิ่งนี้แตกต่างในกรณีของอินเทอร์เฟซการทำให้เป็นอนุกรมซึ่งไม่ต้องการตัวสร้าง no-arg อย่างชัดเจน แต่ใช้การสะท้อนเพื่อสร้างวัตถุและคลาสที่ต่อเนื่องกันขึ้นใหม่
การทำให้เป็นอันดับใน Java: The Controversies
มีข้อโต้แย้งบางประการที่เชื่อมโยงกับแนวคิดเรื่องซีเรียลไลซ์เซชั่นใน Java หลายคนกังวลเกี่ยวกับการลบซีเรียลไลซ์เซชันเป็นขั้นตอนตั้งแต่แรก เป็นที่ยอมรับกันอย่างกว้างขวางว่าสถาปนิกของ Oracle ได้พิจารณาที่จะลบซีเรียลไลเซชันออกจาก Java มานานแล้ว เนื่องจากพวกเขาถือว่าเป็นความผิดพลาดร้ายแรงในปี 1997
จากการวิจัยของพวกเขา ข้อบกพร่องในการออกแบบขั้นตอนการทำให้เป็นอันดับนั้นเป็นภัยคุกคามต่อตัวข้อมูลเอง ในระดับนั้น Mark Reinhold ในปี 1997 ระบุว่าเกือบหนึ่งในสามของช่องโหว่ Java ทั้งหมดเกิดจากกระบวนการซีเรียลไลซ์เซชั่น แม้จะระบุว่าเชาวน์อาจจะสะดวกกว่านั้นเช่นกัน

ดังนั้นจึงมีความเป็นไปได้ที่ดีที่การทำให้ซีเรียลไลซ์เซชั่นเป็นโครงสร้างจะถูกลบออกหรือแทนที่ทั้งหมดจากพงศาวดารของ Java ในการอัปเดตที่จะเกิดขึ้น อาจเป็นเพราะผู้เชี่ยวชาญส่วนใหญ่ไม่คิดว่าการทำให้ซีเรียลไลซ์เซชันเป็นตัวเลือกในอุดมคติที่ผู้เริ่มต้นใน Java สามารถใช้ในโครงการของตนได้
อ่านเพิ่มเติม: แนวคิดและหัวข้อโปรเจ็กต์ Java
รับ หลักสูตรการพัฒนาซอฟต์แวร์ จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว
บทสรุป
ไม่สามารถสรุปการอภิปรายและการพิจารณาเรื่องการทำให้เป็นอนุกรมได้ด้วยการให้ความกระจ่างเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดบางประการ ต่อไปนี้คือข้อมูลบางส่วนที่ผู้ใช้ต้องนำไปใช้เพื่อให้แน่ใจว่าจะได้รับประสบการณ์ที่ดีที่สุดสำหรับตนเอง
- สำหรับการระบุช่องที่ทำให้ซีเรียลไลซ์ได้ ต้องใช้แท็ก javadoc@serial
- สำหรับไฟล์ที่แสดงถึงอ็อบเจ็กต์ที่เป็นอนุกรม ขอแนะนำให้ใช้นามสกุล .ser
- โดยปกติ กระบวนการในการกำหนดให้ฟิลด์คงที่หรือชั่วคราวเป็นอนุกรมเริ่มต้นจะขุ่นเคือง
- เว้นแต่จำเป็นอย่างยิ่ง เราต้องพยายามหลีกเลี่ยงการทำให้เป็นอนุกรมของคลาสที่ขยายได้ในทุกสถานการณ์
- ในขณะที่ใช้การทำให้เป็นอนุกรม เราต้องหลีกเลี่ยง Inner Classes จากการมีส่วนร่วมในกระบวนการ Serialization
หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ Java, OOP และการพัฒนาซอฟต์แวร์ฟูลสแตก โปรดดูโปรแกรม Executive PG ของ upGrad & IIIT-B ในการพัฒนาซอฟต์แวร์ฟูลสแตก ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 500 ชั่วโมง 9+ โครงการและการมอบหมาย, สถานะศิษย์เก่า IIIT-B, โครงการหลักในทางปฏิบัติ & ความช่วยเหลือด้านงานกับ บริษัท ชั้นนำ

