Foundationপ্রথম নীতি থেকে
LEVEL 1 · How Computers Represent Information

Serialization

সিরিয়ালাইজেশন

In-memory data structure-কে একটা flat, self-contained byte sequence-এ রূপান্তর করা — কারণ pointer/memory address শুধু নিজের process-এর মধ্যেই অর্থবহ। বিপরীত দিক: deserialization।

also: marshalling, encoding, wire format, deserialization

Struct সরাসরি memcpy/fwrite করে “serialize” করা একটা সাধারণ এবং বিপজ্জনক ভুল — raw memory-তে তিনটা লুকানো সমস্যা থাকে: padding byte (compiler-বসানো filler, মান undefined — আগের কোনো allocation-এর garbage থেকে যায়), native byte order (গন্তব্য মেশিনে ভিন্ন হতে পারে), আর compiler/architecture-নির্দিষ্ট layout (portable না)।

বাস্তব ঘটনা — EtherLeak (2003): বহু Ethernet driver ছোট packet-এর padding zero দিয়ে না ভরে পুরনো kernel/heap memory দিয়ে ভরত — আক্রমণকারী network থেকেই সেই garbage জড়ো করে sensitive তথ্য পুনর্গঠন করতে পারত।

ফরম্যাটের তিন পরিবার:

ধরনগতিআকারSchema evolution
Fixed binaryসবচেয়ে দ্রুতসবচেয়ে ছোটভঙ্গুর
Self-describing (protobuf, MessagePack)দ্রুতছোটভালো (tag skip করা যায়)
Text (JSON)ধীরবড়সবচেয়ে নমনীয়

Struct padding কমানোর কৌশল: field-কে আকার অনুসারে বড় থেকে ছোট সাজালে alignment padding সর্বনিম্ন হয় — প্রায়ই ২৫-৫০% জায়গা বাঁচে, কোনো data না হারিয়ে।

Java Serializable আর Python pickle — দুটোই untrusted data deserialize করলে arbitrary code execution-এর ঝুঁকি বহন করে, তাই কখনো অবিশ্বস্ত উৎস থেকে আসা serialized data blindly deserialize করা উচিত না।