本文以c++語言作為講解序列化的作用。
一般說到序列化,其實是包含了反序列化。
以c++為例,序列化就是將結構體(或者是類)等複雜的資料結構的各個屬性有序地儲存到字元陣列。而反序列化就是將有序的字元陣列還原回結構體(或者是類)等複雜的資料結構。
1、方便網路傳輸
我們都知道,socket的資料都是以字串進行傳輸,而序列化的作用就是將複雜的資料結構轉換成字串。
2、方便協議解釋
序列化中的「序」就是有序的意思,有序的字串序列可以供絕大多數的程式語言解釋。而protocol buffers就是其中的突出代表。
3、方便資料儲存
方便資料儲存這個好理解,就是解決一對多的問題。不用序列化可能需要儲存多條資訊,而序列化可以將多條資料合成一條進行儲存;方便資料運維。
序列化也是一把雙刃劍,優點明顯,缺點同樣明顯!
1、效能
不是說序列化效率低下,而是人為在序列化上效率控制上。以在windows(vs2013)下為例,當我們對結構體進行賦值時,當結構體位元組小於等於4096時,編譯器會將結構體每個值進行一一賦值(這裡的值不是真正結構的值,相對彙編來說是4個位元組);當結構體位元組大於4096時,編譯器會直接呼叫memcpy。這是因為一一賦值的效率會隨著位元組數的增大而大幅下降。
2、儲存資料不易修改
假如現在資料庫儲存的是a、b、c三個值的序列化的字串。但是現在需求發生變化,需要加入d值。那就麻煩了,因為現在要考慮舊資料的相容問題了。
對於效能問題,只能加強自身能力來確保效能的最大化。而對於儲存資料,我的建議加入乙個版本號,對這個版本號的不同做一些資料相容。
我已經將我自己寫的序列化**放到github : 有興趣的可以看看。下面貼出測試**,及測試結果。
#ifndef test_serializer_h
#define test_serializer_h
#include #include "serializer.h"
namespace testserializer
; ~testdata(){};
bool serialize(serializer &stream) const;
bool unserialize(serializer &stream);
struct datastruct
; datastruct m_data_struct;
typedef std::vectorvector_test;
typedef std::vectorvector_name;
vector_test role_data;
vector_name role_name;
};
bool testdata::serialize(serializer &stream) const
stream.push(role_name.size());
for (vector_name::const_iterator itr = role_name.begin(); itr != role_name.end(); ++itr)
return true;
} bool testdata::unserialize(serializer &stream)
stream.pop(size);
char *str = 0;
unsigned int length = 0;
bool ret = false;
for (unsigned int i = 0; i < size; ++i)
role_name.push_back(str);
} return true;
} void normal()
; serializer temp1(data, 1024);
src_data.serialize(temp1);
serializer temp2(data, 1024);
des_data.unserialize(temp2);
} }
#endif
斷點檢視結果:
序列化的作用
在asp.net中,儲存資訊資料一般有以下三種方式做為選擇 一 儲存到 session 中 二 儲存到 cookie 中 三 儲存到 資料庫 中。同時,序列化的作用也是這樣,不過我認為序列化這種方法更安全,更合理。那麼,序列化是什麼 序列化就是將乙個物件的狀態 各個屬性量 儲存起來,然後在適當的時候...
Serializable序列化的作用
2011年8月5日16 43 04 補充 上面的文字全是 的別人的 當初我看了以後沒有解決我的問題 我的問題是在網路上傳輸 bytearrayoutputstream baos new bytearrayoutputstream bitmap.compress bitmap.compressform...
序列化(序列化)
原書上翻譯為序列化,msdn翻譯為序列化 作用 當需要儲存,或者網路傳輸 remoting時,資料 物件或值 需要序列化 類似於打包傳輸檔案。system.serializableattribute 序列化是指儲存和獲取磁碟檔案 記憶體或其他地方中的物件。在序列化時,所有的例項資料都儲存到儲存介質上...