การทำให้เป็นอันดับคืออะไร


149

ฉันเริ่มต้นใช้งานการเขียนโปรแกรมเชิงวัตถุ (OOP) และต้องการทราบว่า: ความหมายของการทำให้เป็นอันดับใน OOP parlance คืออะไร?


ดูที่บทความนี้ซึ่งอธิบายว่าทำไมไม่ใช้ซีเรียล
ไลเซชั่น

4
บทความนั้นเป็น BS ที่สมบูรณ์ดังนั้นจึงให้คะแนน
RedAces

มันเป็นคำถามที่กว้างเกินไปที่มักจะถูกลบเพราะการค้นหาใน Google จะให้คำตอบทันทีหรือไม่
arvymetal

2
@arvymetal คุณพูดถูก นี่เป็นผลลัพธ์แรกเมื่อฉัน googled :) และมันเป็นสิ่งที่ฉันกำลังมองหา
R_G

คำตอบ:


143

การทำให้เป็นอันดับเป็นกระบวนการของการเปลี่ยนวัตถุในหน่วยความจำให้เป็นกระแสข้อมูลของไบต์ดังนั้นคุณสามารถทำสิ่งต่าง ๆ เช่นเก็บไว้ในดิสก์หรือส่งผ่านเครือข่าย

Deserialization เป็นกระบวนการย้อนกลับ: เปลี่ยนกระแสของไบต์เป็นวัตถุในหน่วยความจำ


46
นอกจากนี้คำกริยาMarshalและUnmarshalมีความเหมือนและSerialize Deserialize
wulfgarpro

4
วัตถุในหน่วยความจำแสดงเป็นไบต์ที่ระดับต่ำสุดแล้วหรือไม่
mahacoder

3
วัตถุในหน่วยความจำจะถูกจัดรูปแบบโดยคอมไพเลอร์ระบบปฏิบัติการและ / หรือฮาร์ดแวร์ เปลี่ยนคอมไพเลอร์ของคุณและคุณเปลี่ยนรูปแบบของคุณ วัตถุที่ต่อเนื่องกันจะมีรูปแบบที่กำหนดโดยรหัสของคุณเพื่อให้คุณสามารถรับประกันรูปแบบได้ สิ่งนี้ยังมีประโยชน์เมื่อส่งวัตถุผ่านเครือข่าย - เครื่องรับอาจมีสถาปัตยกรรมที่แตกต่างอย่างสิ้นเชิง (และการเป็นตัวแทนในหน่วยความจำ)
Andrew Barnett

1
ดังนั้นมันจะเปลี่ยนเป็นสตริงหรือไม่?
NoName

1
สตริงสามารถเป็นรูปแบบที่ถูกต้อง แต่ไม่จำเป็นต้องเป็นสตริง สตริงมีรูปแบบที่แตกต่างกัน (ASCII, UTF8, UTF16, EBCDIC ... ) และจริง ๆ แล้วแสดงให้เห็นถึงแนวคิดที่ค่อนข้างดี สตริง (วัตถุในหน่วยความจำ) abcจะถูกทำให้เป็นอนุกรมเป็น0x61 0x62 0x63(ASCII) หรือ0x00 0x61 0x00 0x62 0x00 0x63(UTF16) - โดยมีหรือไม่มีสิ่งต่าง ๆ เช่นเทอร์มินัล NUL หรือความยาวที่เข้ารหัส
Andrew Barnett

91

การพูดซีเรียลไลซ์เซชั่นเป็นกระบวนการของการแปลงออบเจกต์เป็นสตรีมของไบต์เพื่อให้สามารถถ่ายโอนผ่านเครือข่ายหรือเก็บไว้ในที่จัดเก็บข้อมูลถาวร

ซีเรียลไลซ์เป็นตรงข้ามแน่นอน - Fetch กระแสของไบต์จากเครือข่ายหรือการเก็บรักษาการติดตาและแปลงกลับเป็นวัตถุที่มีสภาพเดียวกัน

สิ่งที่ต้องเข้าใจคือการตีความหรือจัดการกระแสข้อมูลของไบต์เหล่านั้นเพื่อให้เราได้รับวัตถุ / สถานะเดียวกันที่แน่นอน มีหลายวิธีที่จะทำให้สำเร็จ บางส่วนของพวกเขาคือ -

  1. XML : แปลงวัตถุเป็น XML ถ่ายโอนผ่านเครือข่ายหรือเก็บไว้ในไฟล์ / db ดึงข้อมูลและแปลงกลับเป็นวัตถุด้วยสถานะเดียวกัน ใน Java เราใช้ไลบรารีJAXB (สถาปัตยกรรม Java สำหรับการโยง XML) (จาก java 6 มาพร้อมกับ JDK)
  2. JSON : สามารถทำได้ด้วยการแปลง Object เป็นJSON (สัญกรณ์ Object JavaScript) อีกครั้งมีห้องสมุด GSON ที่สามารถใช้สำหรับการนี้
  3. หรือเราสามารถใช้การทำให้เป็นอันดับที่จัดทำโดยภาษา OOP เอง ตัวอย่างเช่นใน Java คุณสามารถทำให้เป็น Object ของฉันทำให้มันใช้Serializable interfaceและเขียนไปยัง Object Stream

@AniketThakur คำอธิบายที่ดีมากคุณสามารถให้ลิงค์สำหรับฉันเพื่อเรียนรู้เกี่ยวกับเรื่องJSONนี้ได้หรือไม่เพราะฉันไม่รู้อะไรเกี่ยวกับมัน
Kasun Siyambalapitiya

เมื่อใดก็ตามที่เราพูดถึงการทำให้เป็นอันดับเหตุใดเรามักอ้างถึง Object เท่านั้น เราไม่สามารถใช้การทำให้เป็นอันดับเป็นภาษาฟังก์ชั่นซึ่งเราไม่มีวัตถุใด ๆ มากกว่าที่เราใช้ไฟล์ในการถ่ายโอนผ่านเครือข่าย
Pardeep Sharma

1
ก่อนอื่นทำไมเราต้องแปลงวัตถุให้เป็นไบต์และย้อนหลัง เหตุใดจึงไม่เป็นการดำเนินการโดยนัยสำหรับผู้ใช้ที่พยายามทำเช่นนั้น
Aparna Chaganti

1
หากเราสามารถใช้ JSON หรือ XML ได้แล้วทำไมเราต้องการหรือบอกว่าแปลงมันให้เป็นจำนวนไบต์? จากนั้นเราจะเก็บมันไว้ใน JSOn หรือ XML แทนการแปลงเป็นไบต์
Muhammad Faizan Fareed

78

คำอธิบายง่ายๆผ่านรูปภาพ:

เร็กซ์สุนัขของฉันเป็นอนุกรม!

คำอธิบายโดยการเปรียบเทียบ:

สมมติว่าฉันกำลังคุยกับเพื่อนทางโทรศัพท์และฉันบอกเขาเกี่ยวกับลูกสุนัขตัวใหม่ของฉัน

นี่คือปัญหาของฉัน: ลูกสุนัขเป็นสิ่งมีชีวิตหายใจของสัตว์เลี้ยงลูกด้วยนม ฉันตั้งใจจะถ่ายทอดลูกสุนัขผ่านสายโทรศัพท์ได้อย่างไร? ฉันไม่สามารถวางลูกสุนัขของฉันลงในตัวรับโทรศัพท์ของฉัน

ดังนั้นฉันจะต้องถ่ายทอดการเป็นตัวแทนของลูกสุนัขทางโทรศัพท์ กล่าวอีกนัยหนึ่งฉันก็ทำให้สุนัขเร็กซ์ของฉันเป็นอนุกรมแล้วส่งรุ่น Rex ที่เป็นอนุกรมของเขาผ่านสายโทรศัพท์:

{ "name":"Rex", "age":5, "favourite_food": pedigree_choice_cuts, "favourite_game": fetch_ball, "favourite_hobby": wagging_tail }

มันเป็นตัวแทนที่สมบูรณ์แบบ - สุนัขของฉันเป็นอนุกรม

สรุป:

การทำให้เป็นอนุกรมโดยทั่วไปหมายถึงการเปลี่ยนสุนัขเร็กซ์ของฉันให้เป็นอย่างอื่น - วัตถุ JSON - ซึ่งสามารถส่งผ่านสายโทรศัพท์เป็นซีรีย์ 1 และ 0 เพื่อนของฉันในนิวยอร์คสามารถแปล 1s และ 0s เหล่านั้นกลับไปเป็นวัตถุ JSON เพื่อที่เขาจะได้เป็นตัวแทนสุนัขเร็กซ์ที่สมบูรณ์แบบของฉัน


16

ลองดูนี่จะให้คำอธิบายที่ดี:

http://en.wikipedia.org/wiki/Serialization

ฉันคิดว่าการใช้คำว่าซีเรียลไลเซชั่นโดยทั่วไปนั้นเกี่ยวข้องกับการแปลงออบเจ็กต์ไบนารี่เป็นเอ็กเอ็มแอล (หรือสตริงอื่น ๆ ) เพื่อที่จะสามารถเก็บไว้ในฐานข้อมูล / ไฟล์หรือส่งข้ามเครือข่าย Deserialization เป็นกระบวนการย้อนกลับ - การแปลง XML / สตริงกลับไปเป็นวัตถุ

แก้ไข: คำอื่นที่คุณอาจเจอคือการเรียงลำดับคำสั่ง / unmarshalling มาร์แชลนิ่งเป็นแนวคิดเดียวกับการทำให้เป็นอนุกรมและการแยกส่วนจะเหมือนกันกับ


3
ไม่จำเป็นต้องเป็นเพียงแค่ XML เท่านั้นมันสามารถเป็นตัวแทนได้แม้แต่การแทนแบบไบนารี
Matthew Farwell

7

การทำให้เป็นอันดับเป็นกระบวนการของการแปลงวัตถุเป็นกระแสข้อมูลไบต์เพื่อเก็บวัตถุหรือส่งไปยังหน่วยความจำฐานข้อมูลหรือไฟล์ วัตถุประสงค์หลักคือเพื่อบันทึกสถานะของวัตถุเพื่อให้สามารถสร้างใหม่ได้เมื่อต้องการ กระบวนการย้อนกลับเรียกว่า

...

ภาพประกอบนี้แสดงกระบวนการโดยรวมของการทำให้เป็นอนุกรม

กระบวนการโดยรวมของการเป็นอันดับ

...

ผู้พัฒนาสามารถดำเนินการต่าง ๆ เช่นการส่งวัตถุไปยังแอปพลิเคชันระยะไกลผ่านบริการเว็บผ่านวัตถุจากโดเมนหนึ่งไปยังอีกโดเมนหนึ่งผ่านวัตถุผ่านไฟร์วอลล์เป็นสตริง XML หรือรักษาความปลอดภัยหรือเฉพาะผู้ใช้ ข้อมูลข้ามแอปพลิเคชัน

จากhttps://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/

(เน้นที่เหมือง)


5

การทำให้เป็นอันดับเป็นกระบวนการของการแปลงข้อมูลที่ไม่เรียงลำดับ (เช่นวัตถุ) เป็นชุดของโทเค็นซึ่งสามารถนำมาใช้ในภายหลังเพื่อสร้างข้อมูลต้นฉบับใหม่ แบบฟอร์มต่อเนื่องมักเป็นชุดของข้อความ แต่ไม่จำเป็นต้องเป็น


2

การทำให้เป็นอันดับคือการแปลงวัตถุเป็นลำดับบิตที่จัดเก็บได้

เพื่อให้คุณสามารถบันทึกลำดับนี้ไปยังไฟล์ db หรือส่งผ่านเครือข่าย

ในภายหลังคุณสามารถยกเลิกการทำให้เป็นวัตถุจริงและนำมาใช้ซ้ำได้ทุกเมื่อที่คุณต้องการ

บริการบนเว็บและAJAXเป็นตัวอย่างที่พบบ่อยที่สุดของการทำให้เป็นอนุกรม วัตถุเป็นอันดับก่อนที่จะส่งการตอบสนองไปยังลูกค้า


1

การทำให้เป็นอนุกรมคืออะไร แต่การถ่ายโอนออบเจ็กต์ที่รองรับจาวาไปยังไฟล์ที่รองรับ

                         (OR)

การแปลงจาวาที่รองรับฟอร์มไปยังเครือข่ายที่รองรับ .. ขอบเขตหลักของการทำให้เป็นอนุกรมคืออะไรนอกจากการถ่ายโอนข้อมูลจากชั้นหนึ่งไปยังอีกชั้นหนึ่ง ... เฉพาะวัตถุที่ต่อเนื่องกันเท่านั้นที่เราสามารถส่งผ่านเครือข่าย ..


1

การทำให้เป็นอันดับเป็นกระบวนการของการแปลงวัตถุที่รองรับ Java, C # หรืออื่น ๆ (ภาษา OOP) เป็นรูปแบบการขนส่ง วิธีนี้จะถูกส่งผ่านเครือข่ายหรือเก็บไว้ในดิสก์ สำหรับคลาสที่ต้องเป็นแบบอนุกรมมันต้องใช้อินเตอร์เฟสแบบอนุกรมได้


ไม่ จำกัด เฉพาะ Java หรือ C # ในภาษาการเขียนโปรแกรมส่วนใหญ่เราใช้การทำให้เป็นอนุกรม เช่นในโมดูล python pickle ใช้เหมือนกัน
Pardeep Sharma

0

การทำให้เป็นอนุกรมกำลังเปลี่ยนข้อมูลให้เป็น "สตริง" เชิงเส้นของไบต์

บางคนบอกว่าเหมือนกันมากกว่าหรือน้อยกว่า แต่ฉันเน้นว่าแบบจำลองคอมพิวเตอร์ต้องการข้อมูลที่เหมาะสมกับ RAM ที่ระบุในมิติเดียวหรือที่เก็บข้อมูลถาวร

สิ่งต่าง ๆ ส่วนใหญ่ที่เป็น "ข้อมูล" นั้นสามารถจัดลำดับได้โดยเนื้อแท้ (แม้ว่าคุณจะต้องลดรูปแบบนามธรรมให้เป็นแบบเชิงเส้น) ไม่ใช่ serializable กล่าวว่าการเชื่อมต่อเครือข่ายหรือเครื่องรัฐตามซับซ้อนเช่น parser


0

การทำให้เป็นอนุกรมเกี่ยวข้องกับการแปลงวัตถุไบนารีให้เป็นตัวแทน XML (หรือสตริงอื่น ๆ ) เพื่อให้สามารถเก็บไว้ในฐานข้อมูล / ไฟล์หรือส่งข้ามเครือข่ายในการเรียกใช้บริการเว็บ Deserialization เป็นกระบวนการย้อนกลับ - การแปลง XML / สตริงกลับไปเป็นวัตถุ


0

เมื่อ instantiating (สร้าง) วัตถุจริง (สิ่ง) จากคลาส (พิมพ์เขียว) มีความจำเป็นต้องบันทึกวัตถุ (สิ่ง) โดย serializing มัน (ทำลายมันลงไปที่โครงสร้างอะตอมพื้นฐาน) ไปยังพื้นที่ในหน่วยความจำ (ชนิดของผู้ขนส่ง Star Treks เหมือน) คุณแบ่งสิ่งต่าง ๆ ลงในนั้นสตรีมข้อมูลที่สามารถขนส่งไปที่ไหนสักแห่งและเก็บไว้ จากนั้นเมื่อคุณต้องการสร้างสิ่งที่คุณเพิ่งดึงอินสแตนซ์ที่เก็บอะตอมกลับเข้าไปในวัตถุ แตกต่างจากการติดตั้ง


0

การทำให้เป็นอันดับเป็นกระบวนการของการแปลงวัตถุเป็นสตรีมข้อมูลแบบไบนารีเพื่อให้สามารถเก็บไว้ในไฟล์หรือส่งผ่านเครือข่ายที่สามารถคืนค่ากลับเป็นวัตถุเดียวกัน

เอกสารนี้จะช่วยให้คุณเข้าใจรายละเอียดเกี่ยวกับการทำให้เป็นอันดับของ Java


-1

การทำให้เป็นอันดับคือเมื่อวัตถุ (กลุ่มของหน่วยความจำ) แปลในรูปแบบเมื่อสถานะของวัตถุสามารถบันทึกในไฟล์ (เป็นตัวอย่าง)

เพียงแค่ถือว่ามันเป็นการทำคุกกี้ - วัตถุคือแป้งคุกกี้ - เป็นแป้งที่ต่อเนื่องกัน

ดังนั้นโดย "serializing" คุณสามารถส่งคุกกี้ให้เพื่อนของคุณ

อะไรแบบนั้น :-)


4
... ยกเว้นคุกกี้ไม่สามารถเปลี่ยนกลับเป็นแป้งได้ (ดีซีเรียลไลซ์)
Dave Sherohman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.