C 設計 如何設計支援網路序列化的類

2021-08-26 01:39:12 字數 699 閱讀 4973

一些物件為了能夠很方便地在網路上進行傳輸,就需要支援序列化和反序列化。

如何設計乙個易於序列化和反序列化的類呢?

myclass; myclassinstance->deserialize(const char* buf, const int64_t data_len, int64_t& pos)

序列化(serialize)比較容易實現,只要將myclass的內部狀態按照一定的協議寫入到buf中即可。問題出在反序列化(deserialize)上。考慮在上例中如何恢復is_b的狀態呢?如果這個參與反序列化的類是剛剛宣告的,is_b指標可能根本沒有初始化(它還指望deserialize給它初始化呢!),那麼反序列化過程無法遞迴呼叫innerclassb->deserialize()方法。

因此,乙個支援反序列化的類中,如果它有成員類需要被序列化,那麼這個成員類最好是乙個例項,而不是乙個指標。對於指標的情況,需要特別設計初始化函式,保證在執行反序列化之前這個指標指向了乙個類例項。

每個類應該有乙個預設無參建構函式,有乙個預設初始正常狀態。這種類在反序列化中首先被建立出來,相當於乙個骨架,然後再在反序列化過程中利用反序列化提取出來的資料進行填充,最終形成乙個完整的類。

特別要提到的是關於記憶體管理問題,對於不需要支援併發訪問的類可以直接在棧上分配記憶體,對於執行緒級別的可以使用tsi管理記憶體,對於需要支援併發的可以使用堆上的記憶體。

上面寫得思路不太清晰!等完成**重構後再敘。

LINUX網路傳輸的序列化和反序列化C

來到公司實習,開始面向實習生有乙個小專案,當然了,伺服器就由我乙個人來寫了,1.0主要完成的使用純c 寫linux下udp的伺服器框架,大部分還都是以前在學校做過的專案套用的,難度不大,經過跟大boss討論,版本2.0決定引入類,然後改用tcp進行傳輸,但是突然轉變成c 還是有些不適應,雖然引入了類...

mysql 主鍵設計 如何設計mysql的主鍵?

如何設定mysql的主鍵?在一張資料表中,主鍵的作用是很極其重要的,那麼在資料表中如何設計mysql的主鍵?今天給大家介紹主鍵的設計原則。mysql資料庫中,主鍵是是資料庫物理模式的基石,其重要性自然不言而喻,下文為您介紹的就是mysql主鍵的設計原則,供您參考。學習mysql資料庫,mysql主鍵...

C 的序列化和反序列化

序列化就是把乙個物件儲存到乙個檔案或資料庫欄位中去,而反序列化則是把這個檔案再轉化成原來的物件來使用,他的特點就是儲存為二進位制物件 bin檔案 優點就是容易儲存和取出。我們也可以理解為序列化就是儲存,反序列化就是取出。二進位制的關鍵字 binaryformatter 序列化關鍵字 serializ...