序列化 Serilization/ Serialisation
序列化 Serilization/ Serialisation
將資料結構或物件轉換成可儲存/傳送的格式 (即稱為序列化),以便之後能還原(反序列化)
序列化: serialization (US spelling) or serialisation (UK spelling)
反序列化: deserialization, (also called unserialization or unmarshalling)
序列化在電腦科學中通常有以下定義:
- 對同步控制而言,表示強制在同一時間內進行單一存取。
- 在資料儲存與傳送的部分是指將一個物件儲存至一個儲存媒介,例如檔案或是記憶體緩衝等,或者透過網路傳送資料時進行編碼的過程,可以是位元組或是XML等格式。而位元組的或XML編碼格式可以還原完全相等的物件。這程式被應用在不同應用程式之間傳送物件,以及伺服器將物件儲存到檔案或資料庫。相反的過程又稱為反序列化。
用途
- 經由電信線路傳輸資料的方法(通訊)。
- 儲存資料的方法(在資料庫或硬碟)。
- 遠端程式調用的方法,例如在SOAP中。
- 檢測隨時間資料變動的方法。
優點
它使輸出入介面簡單而共同,能被用來保持及傳遞物件的狀態。
要求高效能的應用時,花費精力處理更複雜的非線性儲存系統是有其必要意義的。
缺點
序列化可能會破解抽象資料型別的封裝實作,而使其詳細內容曝光。簡單的序列化實作可能違反物件導向中私有資料成員需要封裝(encapsulation)的原則。商用軟體的出版商通常會將應用軟體的序列化格式,當作商業秘密,以阻礙競爭對手生產可相容的產品;有些會蓄意地混淆,或甚至將序列化資料作加密處理。
程式語言支援
C/C++
C 和 C++ 沒有提供任何類型的高階序列化構造,但是兩種語言都支援將內建資料型別以及一般的資料結構(struct)輸出為二進制資料。
Boost框架有實作Boost.Serialization。
Python
Python編程核心的序列化機制是pickle標準函式庫,這名稱暗示資料庫相關的特別術語「浸漬」,來描述資料反序列化(unpickling for deserializing)。Pickle 使用一個簡單的基於堆疊的虛擬機來記錄用於重建物件的指令。這是個跨版本並可自訂定義的序列化格式,但並不安全(不能防止錯誤或惡意資料)。錯誤格式或蓄意構建的資料,可能導致序列反解器匯入任意模組,而且實例化任何物件。
這個函式庫有另外包括序列化為標準資料格式的模組:json(內置的基本純量與集合型別支援,且能夠通過編解碼支援任何型別)和XML編碼的屬性列表(plistlib),限於plist支援的類型(數字,字串,布林,元組,串列,字典,日期時間和二進制blob)。最後,建議在正確的環境中評估物件的__repr__,使其和Common Lisp的列印物件大略地相符合。並非所有物件類型可以自動浸漬,特別是那些擁有操作系統資源(如檔案把柄)的,但開發人員能註冊自訂定義的「縮減」和構造功能,來支援任何型別的浸漬和序列化。
Pickle最初是純粹以Python程式語言來實作的模組,但在Python 3之前的版本中,cPickle模組(也是內建的)提供了更快速的效能。cPickle從Unladen Swallow專案改造而成。在Python 3中,開發人員應該匯入標準版本,該版本會嘗試匯入加速版本並返回純Python版本。
JavaScript
Since ECMAScript 5.1,[11] JavaScript has included the built-in JSON
object and its methods JSON.parse()
and JSON.stringify()
. Although JSON is originally based on a subset of JavaScript,[12] there are boundary cases where JSON is not valid JavaScript. Specifically, JSON allows the Unicode line terminators U+2028 LINE SEPARATOR and U+2029 PARAGRAPH SEPARATOR to appear unescaped in quoted strings, while ECMAScript 2018 and older does not.[13][14] See the main article on JSON.
Windows PowerShell
Windows PowerShell implements serialization through the built-in cmdlet Export-CliXML
. Export-CliXML
serializes .NET objects and stores the resulting XML in a file. To reconstitute the objects, use the Import-CliXML
cmdlet, which generates a deserialized object from the XML in the exported file. Deserialized objects, often known as "property bags" are not live objects; they are snapshots that have properties, but no methods. Two dimensional data structures can also be (de)serialized in CSV format using the built-in cmdlets Import-CSV
and Export-CSV
.
沒有留言:
張貼留言