2020年8月10日 星期一

序列化 Serilization/ Serialisation

 

序列化 Serilization/ Serialisation

序列化 Serilization/ Serialisation

將資料結構或物件轉換成可儲存/傳送的格式 (即稱為序列化),以便之後能還原(反序列化)

序列化: serialization (US spelling) or serialisation (UK spelling)

反序列化: deserialization, (also called unserialization or unmarshalling)

序列化電腦科學中通常有以下定義:

  • 對同步控制而言,表示強制在同一時間內進行單一存取。

用途

  • 經由電信線路傳輸資料的方法(通訊)。
  • 儲存資料的方法(在資料庫或硬碟)。
  • 遠端程式調用的方法,例如在SOAP中。
  • 在以元件為基礎,例如COMCORBA的軟體工程中,是物件的分散式方法。
  • 檢測隨時間資料變動的方法。

優點

它使輸出入介面簡單而共同,能被用來保持及傳遞物件的狀態。

要求高效能的應用時,花費精力處理更複雜的非線性儲存系統是有其必要意義的。

缺點

序列化可能會破解抽象資料型別的封裝實作,而使其詳細內容曝光。簡單的序列化實作可能違反物件導向中私有資料成員需要封裝(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-CliXMLExport-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.

https://zh.wikipedia.org/wiki/序列化

沒有留言:

張貼留言

ADGuard