国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是序列化 為什么要序列化

麥辣雞腿堡 ? 來源:古月居 ? 作者:古月居 ? 2023-09-14 17:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

什么是序列化?

“序列化”(Serialization )的意思是將一個對象轉化為字節流。

這里說的對象可以理解為“面向對象”里的那個對象,具體的就是存儲在內存中的對象數據。

與之相反的過程是“反序列化”(Deserialization )。

雖然掛著機器人的羊頭,但是后面的介紹全部是計算機知識,跟機器人一丁點關系都沒有,序列化就是一個純粹的計算機概念。

序列化的英文Serialize就有把一個東西變成一串連續的東西之意。

形象的描述,數據對象是一團面,序列化就是將面團拉成一根面條,反序列化就將面條捏回面團。

另一個形象的類比是我們在對話或者打電話時,一個人的思想轉換成一維的語音,然后在另一個人的頭腦里重新變成結構化的思想,這也是一種序列化。

圖片

面對序列化,很多人心中可能會有很多疑問。

首先,為什么要序列化?或者更具體的說,既然對象的信息本來就是以字節的形式儲存在內存中,那為什么要多此一舉把一些字節數據轉換成另一種形式的、一維的、連續的字節數據呢?

如果我們的程序在內存中存儲了一個數字,比如25。那要怎么傳遞25這個數字給別的程序節點或者把這個數字永久存儲起來呢?

很簡單,直接傳遞25這個數字(的字節表示,即0X19,當然最終會變成二進制表示11001以高低電平傳輸存儲)或者直接把這個數字(的字節表示)寫進硬盤里即可。

所以,對于本來就是連續的、一維的、一連串的數據(例如字符串),序列化并不需要做太多東西,其本質是就是由內存向其它地方拷貝數據而已。

所以,如果你在一個序列化庫里看到memcpy函數不用覺得奇怪,因為你知道序列化最底層不過就是在操作內存數據而已(還有些庫使用了流的ostream.rdbuf()-》sputn函數)。

可是實際程序操作的對象很少是這么簡單的形式,大多數時候我們面對的是包含不同數據類型(int、double、string)的復雜數據結構(比如vector、list),它們很可能在內存中是不連續存儲的而是分散在各處。比如ROS的很多消息都包含向量。

數據中還有各種指針和引用。而且,如果數據要在運行于不同架構的計算機之上的、由不同編程語言所編寫的節點程序之間傳遞,那問題就更復雜了,它們的字節順序endianness規定有可能不一樣,基本數據類型(比如int)的長度也不一樣(有的int是4個字節、有的是8個字節)。

這些都不是通過簡單地、原封不動地復制粘貼原始數據就能解決的。這時候就需要序列化和反序列化了。

所以在程序之間需要通信時(ROS恰好就是這種情況),或者希望保存程序的中間運算結果時,序列化就登場了。

另外,在某種程度上,序列化還起到統一標準的作用。

我們把被序列化的東西叫object(對象),它可以是任意的數據結構或者對象:結構體、數組、類的實例等等。

把序列化后得到的東西叫archive,它既可以是人類可讀的文本形式,也可以是二進制形式。

前者比如JSON和XML,這兩個是網絡應用里最常用的序列化格式,通過記事本就能打開閱讀;

后者就是原始的二進制文件,比如后綴名是bin的文件,人類是沒辦法直接閱讀一堆的0101或者0XC9D23E72的。

序列化算是一個比較常用的功能,所以大多數編程語言(比如C++Python、Java等)都會附帶用于序列化的庫,不需要你再去造輪子。

以C++為例,雖然標準STL庫沒有提供序列化功能,但是第三方庫Boost提供了[ 2
]谷歌的protobuf也是一個序列化庫,還有Fast-CDR,以及不太知名的Cereal,Java自帶序列化函數,python可以使用第三方的pickle模塊實現。

總之,序列化沒有什么神秘的,用戶可以看看這些開源的序列化庫代碼,或者自己寫個小程序試試簡單數據的序列化,例如這個例子,或者這個,有助于更好地理解ROS中的實現。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7335

    瀏覽量

    94774
  • 編程語言
    +關注

    關注

    10

    文章

    1964

    瀏覽量

    39573
  • ROS
    ROS
    +關注

    關注

    1

    文章

    293

    瀏覽量

    18728
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何使用Serde進行序列化和反序列化

    Serde 是一個用于序列化和反序列化 Rust 數據結構的庫。它支持 JSON、BSON、YAML 等多種格式,并且可以自定義序列化和反序列化方式。Serde 的特點是代碼簡潔、易于
    的頭像 發表于 09-30 17:09 ?2386次閱讀

    Java序列化的機制和原理

    本文講解了Java序列化的機制和原理。從文中你可以了解如何序列化一個對象,什么時候需要序列化以及Java序列化的算法。AD:WOT2014課程推薦:實戰MSA:用開源軟件搭建微服務系統
    發表于 07-10 07:27

    c語言序列化和反序列化有何區別

    這里寫自定義目錄標題c語言序列化和反序列化tplut.htplut.c測試代碼參考c語言序列化和反序列化網絡調用,數據傳輸都需要把數據序列化
    發表于 07-14 07:32

    關于c語言序列化和反序列化的知識點看完你就懂了

    關于c語言序列和反序列化的知識點你就懂了
    發表于 10-15 08:47

    SpringMVC JSON框架的自定義序列化與反序列化

    ?StringCodec是fastJson默認的String類型的反序列化邏輯類,里面處理的類型有String、StringBuffer、StringBuilder等,還有各種的集合、數組結構,涉及
    發表于 10-10 16:02

    理解PHP反序列化漏洞

    理解PHP反序列化漏洞
    發表于 09-07 11:03 ?7次下載
    理解PHP反<b class='flag-5'>序列化</b>漏洞

    java序列化和反序列化范例和JDK類庫中的序列化API

    一、序列化和反序列化的概念 把對象轉換為字節序列的過程稱為對象的序列化。 把字節序列恢復為對象的過程稱為對象的反
    發表于 09-27 10:13 ?6次下載

    static屬性為什么不會被序列化

    實現序列化和反序列化為什么實現Serializable接口?
    的頭像 發表于 07-15 11:03 ?2462次閱讀

    python序列化對象

    序列化對象:將對象轉換為可以存儲或傳輸的形式。 (1) 用于存儲:將對象的字節序列存儲到文件中,程序退出后不會消失,便于后續使用。
    的頭像 發表于 03-10 09:57 ?2866次閱讀

    ROS中的序列化實現

    理解了序列化,再回到ROS。我們發現,ROS沒有采用第三方的序列化工具,而是選擇自己實現,代碼在roscpp_core項目下的roscpp_serialization中,見下圖。這個功能涉及的代碼量
    的頭像 發表于 09-14 17:26 ?1658次閱讀

    如何用C語言進行json的序列化和反序列化

    json是目前最為流行的文本數據傳輸格式,特別是在網絡通信上廣泛應用,隨著物聯網的興起,在嵌入式設備上,也需要開始使用json進行數據傳輸,那么,如何快速簡潔地用C語言進行json的序列化和反序列化
    的頭像 發表于 10-07 11:05 ?2512次閱讀

    Java序列化怎么使用

    轉換方式就叫做序列化。將文件或者網絡傳輸中得到的 byte[] 數組轉換為 java 對象就叫做反序列化。 怎么使用 如果一個 Java 對象要能被序列化,必須實現一個特殊
    的頭像 發表于 10-10 14:19 ?1076次閱讀

    什么時候需要Boost序列化

    程序開發中,序列化是經常需要用到的。像一些相對高級語言,比如JAVA, C#都已經很好的支持了序列化,那么C++呢?當然一個比較好的選擇就是用Boost,這個號稱C++準標準庫的東西。 什么時候需要
    的頭像 發表于 11-10 10:14 ?1024次閱讀

    極簡代碼,搞定JSON序列化與反序列化

    快速實現JSON數據的生成(序列化)與解析(反序列化)。 目前json庫已全面支持LuatOS開發系列產品,開發者可根據項目實際需求,靈活選用并進行快速集成與開發。 一、 JSON基礎要點 在
    的頭像 發表于 02-23 21:46 ?332次閱讀
    極簡代碼,搞定JSON<b class='flag-5'>序列化</b>與反<b class='flag-5'>序列化</b>

    JSON:簡潔代碼高效搞定序列化與反序列化

    面對頻繁的數據交互需求,用最簡方式實現JSON序列化與反序列化已成為開發者必備技能,借助主流庫,輕松實現零負擔數據轉換。JSON(JavaScriptObjectNotation)是一種輕量級
    的頭像 發表于 02-25 19:04 ?94次閱讀
    JSON:簡潔代碼高效搞定<b class='flag-5'>序列化</b>與反<b class='flag-5'>序列化</b>