“สวัสดี อามีโก้!”
"สวัสดี บิลาโบ!"
"วันนี้ฉันจะบอกคุณเกี่ยวกับส่วนต่อประสานเครื่องหมาย "
"อินเตอร์เฟสตัวทำเครื่องหมายเป็นอินเทอร์เฟซที่ไม่มีเมธอด เมื่อคลาสใช้อินเทอร์เฟซดังกล่าว เราจะบอกว่ามันถูกทำเครื่องหมายด้วย"
"ตัวอย่างของอินเทอร์เฟซเหล่านี้ได้แก่: โคลนได้ อนุกรมได้ ระยะไกล "
" อินเทอร์เฟซ Serializableใช้เพื่อทำเครื่องหมายคลาสที่สนับสนุนการทำให้เป็นซีเรียลไลซ์ ซึ่งบ่งชี้ว่าอินสแตนซ์ของคลาสเหล่านี้สามารถถูกทำให้เป็นซีเรียลไลซ์และดีซีเรียลไลซ์ได้โดยอัตโนมัติ"
" อินเทอร์เฟซ ระยะไกลใช้เพื่อระบุวัตถุที่สนับสนุนการดำเนินการระยะไกล เช่น วิธีการที่สามารถเรียกใช้จากเครื่องเสมือน Java เครื่องอื่นและ/หรือคอมพิวเตอร์เครื่องอื่น"
" อินเทอร์เฟซ Cloneableใช้เพื่อทำเครื่องหมายคลาสที่รองรับการโคลน"
"โอ้เกี่ยวกับการโคลนหรือการคัดลอก"
"การคัดลอกมีสองประเภท: แบบตื้นและแบบลึก"
" Shallow copyคือการสร้างสำเนาของวัตถุ โดยไม่สร้างสำเนาของวัตถุใดๆ ที่อ้างถึง"
" การทำสำเนาเชิงลึกเกี่ยวข้องกับการทำสำเนาวัตถุ รวมถึงวัตถุที่อ้างถึง และวัตถุที่วัตถุเหล่านั้นอ้างอิง เป็นต้น"
"มีวิธีที่ดีในการสร้างโคลนลึกที่เชื่อถือได้"
"วิธีนี้ใช้ได้ผลแม้ว่านักพัฒนาจะลืมทำเครื่องหมายคลาสว่า Cloneable ก็ตาม "ข้อกำหนดเพียงอย่างเดียวคือออบเจกต์ต้องทำให้ต่อเนื่องได้"
"นี่คือวิธีที่คุณทำ:"
1)สร้างบัฟเฟอร์ (อาร์เรย์ไบต์) ในหน่วยความจำ
2)ทำให้วัตถุและวัตถุย่อยเป็นอนุกรมในบัฟเฟอร์
3)ยกเลิกการซีเรียลลำดับชั้นของวัตถุที่บันทึกไว้ในบัฟเฟอร์
BigObject objectOriginal = new BigObject();
ByteArrayOutputStream writeBuffer = new ByteArrayOutputStream();
ObjectOutputStream outputStream = new ObjectOutputStream(writeBuffer);
outputStream.writeObject(objectOriginal);
outputStream.close();
byte[] buffer = writeBuffer.toByteArray();
ByteArrayInputStream readBuffer = new ByteArrayInputStream(buffer);
ObjectInputStream inputStream = new ObjectInputStream(readBuffer);
BigObject objectCopy = (BigObject)inputStream.readObject();
"ในบรรทัดแรก เราสร้างobjectOriginalซึ่งเราจะโคลน ออบเจกต์และอ็อบเจกต์ย่อยทั้งหมดต้องรองรับการทำให้เป็นอนุกรม"
"ในบรรทัดที่สาม เราสร้างByteArrayOutputStreamซึ่งจะขยายแบบไดนามิกเมื่อมีการเพิ่มข้อมูลใหม่ (เช่น ArrayList)"
"ในบรรทัดที่ 4 เราสร้าง ObjectOutputStream ซึ่งใช้สำหรับการทำให้เป็นอนุกรม"
"ในบรรทัดที่ 5 เราทำการซีเรียลไลซ์objectOriginalเป็นอาร์เรย์ไบต์โดยใช้outputStream และบันทึกลงในwriteBuffer "
"ในบรรทัดที่ 8 เราแปลงwriteBufferเป็นอาร์เรย์ไบต์ธรรมดา หลังจากนั้น เราจะ 'อ่าน' วัตถุใหม่ของเราจากอาร์เรย์นี้"
"ในบรรทัดที่ 9 เราแปลงบัฟเฟอร์เป็นByteArrayInputStreamเพื่อที่จะอ่านจากมันเหมือน InputStream"
"ในบรรทัดที่ 10 เราส่งreadBufferไปยัง ตัวสร้าง ObjectInputStreamเพื่ออ่าน (ดีซีเรียลไลซ์) วัตถุ"
"ในบรรทัดที่ 11 เราอ่านวัตถุของเราและแปลงเป็นBigObject "
"คุณคิดอย่างไร?"
"มันสวย."
"และอย่างไรก็ตาม เมื่อโค้ดถูกไฮไลท์ด้วยสีต่างๆ ก็จะเข้าใจได้ง่ายขึ้นมาก"
GO TO FULL VERSION