Serialization แปลงข้อมูลเพื่อส่งต่อ

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


Serialization

ในทางคอมพิวเตอร์ Serialization นั้นหมายถึงกระบวนการแปลง Data Structure หรือ Object ใดๆ บน Memory ให้ไปอยู่ในรูปแบบที่พร้อมสำหรับการเก็บ (Store) หรือส่งต่อ (Transmit) บางครั้งกระบวนการนี้ก็ถูกเรียกว่า Marshalling ข้อมูลที่ได้จากกระบวนการนี้จำเป็นที่จะต้องสามารถนำไปทำกระบวนการย้อนกลับที่เรียกว่า Deserialization หรือ Unmarshalling เพื่อให้กลายเป็นข้อมูลบน Memory อีกครั้ง

Format

ปกติในทางคอมพิวเตอร์เราจะะมีการ Represent ข้อมูลอยู่ 2 แบบ คือ Human readable format กับแบบ Binary ผลลัพธ์ของการ Serialization ก็เป็น 2 แบบนี้เช่นกัน

ในเรื่อง Serialization จะมีศัพท์อีกคำที่นิยมพูดถึงนั่นก็คือ Protocol ซึ่งหมายถึงข้อกำหนดต่างๆ ในการจัดเรียง และแลกเปลี่ยนข้อมูล

Text-based

Text-based เป็นรูปแบบที่คนสายเว็บน่าจะคุ้นเคย เพราะทั้ง HTTP, JSON หรือ XML ก็จัดเป็น Text-based Protocol ทั้งสิ้น ข้อดีของรูปแบบนี้คือคนอ่านออก ซึ่งทำให้ Debug ได้ง่าย และสามารถสร้างด้วยมือได้

Binary

Binary หรือ byte stream เป็นรูปแบบที่คนอ่านไม่ออก ที่น่าจะรู้จักกันก็น่าจะเป็น BSON ที่ใช้ใน MongoDB หรือ ASN.1 ที่ใช้กันอย่างกว้างขวางในด้าน telecommunications และ computer networking นอกจากนี้ในภาษาโปรแกรมส่วนใหญ่จะมีคำสั่งเกี่ยวกับการ Serialize Object ซึ่งผลลัพธ์ที่ได้ก็จะเป็น Binary เช่นกัน ข้อดีของรูปแบบนี้คือใช้เวลาในการ Serialize ต่ำ และผลลัพธ์มักจะมีขนาดเล็กกว่าแบบ Text-based

ใช้แบบไหนดีกว่ากัน

อันนี้ขึ้นอยู่กับว่าจะเอาไปทำอะไร ถ้าเก็บข้อมูลลงดิสก์จะใช้แบบไหนก็ไม่ต่างกันมาก แต่แบบ Text จะได้ประโยชน์ตรงที่เปิดดูได้ตรงๆ และแก้ไขได้จากข้างนอกโปรแกรม ซึ่งเหมาะกับการทำไฟล์ Config แต่นั่นก็เป็นข้อเสียหลักในเรื่องความปลอดภัยสำหรับข้อมูลที่มีความ sensitive สูง ส่วนถ้าใช้ในการสื่อสารระหว่างเครื่อง ก็แล้วแต่ว่าซีเรียสเรื่องความเร็วแค่ไหน ซีเรียสเรื่องขนาดแค่ไหน แต่สำหรับเกมหรืออะไรที่ต้อง Realtime แล้วคงต้องเป็น Binary เท่านั้น ซึ่งก็มี Library ให้เลือกใช้มากมาย อยู่ที่ว่าต้องการให้ข้อมูลมีขนาดเล็กที่สุดเท่าที่ทำได้ หรือเน้นที่เวลาในการ Serialize/Deserialze ให้น้อยที่สุด


ครั้งหน้าถ้ามีโอกาสจะมาเล่าเรื่องการ Serialize/Deserialze ที่ใช้กันจริงๆ พร้อมตัวอย่าง และถ้ามีโอกกาสอีกจะเขียนอีกตอนเกี่ยวกับการรับส่งข้อมูลที่ได้จากการ Serialize

Varavut Lormongkol

Windows Platform, Android, Server-Side and Web Application Developer. I am a Programming Lover. I love to make an application and design it structures.