→ stupid0319: 你自己建立的struct的size會千變萬化? 12/20 21:40
→ galic: 這個概念叫做data marshalling 12/20 21:54
→ LiloHuang: 要自己刻就先傳4byte表資料長度,再把剩餘payload送出 12/20 22:19
→ LiloHuang: 也可以在最前面再加上這個私有協定的版本號,用以擴充 12/20 22:20
→ LiloHuang: 記得 network order 跟 host order 也得處理一下 12/20 22:24
→ LiloHuang: 通常稱為 serialization,序列化物件又稱 marshalling 12/20 22:29
→ galic: 應該還是叫做marshalling,serialization是指轉成特定格式 12/20 22:34
→ galic: 像是把memory的資料轉成block形式寫到硬碟就是serialize 12/20 22:35
→ galic: 從硬碟裡面讀出來 轉回記憶體格式讓指標可以操作是 12/20 22:36
→ galic: deserialize 12/20 22:37
→ LiloHuang: 建議你讀一下維基百科第一段,兩種說法都有類似的意思 12/20 22:37
→ LiloHuang: 順便可以看一下 Google Protobuf 的簡介 12/20 22:38
→ galic: 但是marshalling也包含如何deserialize資料 也就是Codebase 12/20 22:43
→ galic: wiki說概念相似的引用資料你怎不看一下? 12/20 22:45
→ galic: 微軟2004的文件只是說到marshalling需要serialize資料 12/20 22:45
→ galic: wiki自己解釋成兩個概念相似 12/20 22:46
→ LiloHuang: 因此我說如果是序列化物件比較適合用 marshalling XD 12/20 22:48
→ LiloHuang: 但這篇文章的作者應該想要轉成 byte stream 12/20 22:48
→ LiloHuang: 所以我會用 serialization 來稱呼這個行為 12/20 22:49
→ LiloHuang: marshalling 相對於 serialization 就是多做了些事 12/20 22:51
→ LiloHuang: 但若僅只用 BSD socket 傳資料未必得多做這麼多事情 12/20 22:52
→ LiloHuang: 就像 TCP header 跟 payload 簡單能達成目的也不錯 12/20 22:54
→ LiloHuang: 另外兩個說法類似是個人的經驗,並非指維基百科的內文 12/20 23:00
→ LiloHuang: 比較嚴謹的定義就不重新描述一次了,如有誤解請多包涵 12/20 23:03
→ LiloHuang: Writing a Message 的說明就是呼叫 Marshal 來做 12/20 23:22
→ LiloHuang: serialize protocol buffer data 這之類的說明 12/20 23:24
推 Killercat: 其實最簡單的做法就是boost::archive 12/21 22:48
→ Killercat: 這個應該是能符合90%情況下最好的marshelling了 12/21 22:49
→ Killercat: 缺點就是檔案很大 XD 12/21 22:49
→ clv: 感謝唷 看看 12/22 19:29