【基礎篇-消息隊列】——如何通過網絡傳輸結構化的數據( 序列化與反序列化)

目錄

    • 一、引入前提
    • 二、選擇哪種序列化實現
      • 2.1、選擇哪種序列化實現需要權衡的幾個因素
      • 2.2、如何選擇哪種序列化實現
    • 三、實現高性能的序列化和反序列化
    • 四、小結

本文來源:極客時間vip課程筆記

一、引入前提

  • 在 TCP 的連接上,它傳輸數據的基本形式就是二進制流,也就是一段一段的 1 和 0。在一般編程語言或者網絡框架提供的 API 中,傳輸數據的基本形式是字節,也就是 Byte。一個字節就是 8 個二進制位,8 個 Bit,所以在這里,二進制流和字節流本質上是一樣的。
  • 那對于我們編寫的程序來說,它需要通過網絡傳輸的數據是什么形式的呢?是結構化的數據,比如,一條命令、一段文本或者是一條消息。對應到我們寫的代碼中,這些結構化的數據是什么?這些都可以用一個類(Class)或者一個結構體(Struct)來表示。
  • 那顯然,要想使用網絡框架的 API 來傳輸結構化的數據,必須得先實現結構化的數據與字節流之間的雙向轉換。這種將結構化數據轉換成字節流的過程,我們稱為序列化,反過來轉換,就是反序列化。
  • 序列化的用途除了用于在網絡上傳輸數據以外,另外的一個重要用途是,將結構化數據保存在文件中,因為在文件內保存數據的形式也是二進制序列,和網絡傳輸過程中的數據是一樣的,所以序列化同樣適用于將結構化數據保存在文件中。
  • 很多處理海量數據的場景中,都需要將對象序列化后,把它們暫時從內存轉移到磁盤中,等需要用的時候,再把數據從磁盤中讀取出來,反序列化成對象來使用,這樣不僅可以長期保存不丟失數據,而且可以節省有限的內存空間。

二、選擇哪種序列化實現

  • 如果說,只是實現序列化和反序列的功能,并不難,方法也有很多,比如我們最常使用的,把一個對象轉換成字符串并打印出來,這其實就是一種序列化的實現,這個字符串只要轉成字節序列,就可以在網絡上傳輸或者保存在文件中了。
  • 但是,你千萬不要在你的程序中這么用,這種實現的方式僅僅只是能用而已,絕不是一個好的選擇。
  • 有很多通用的序列化實現,我們可以直接拿來使用。Java 和 Go 語言都內置了序列化實現,也有一些流行的開源序列化實現,比如,Google 的 Protobuf、Kryo、Hessian 等;此外,像 JSON、XML 這些標準的數據格式,也可以作為一種序列化實現來使用。
  • 當然,我們也可以自己來實現私有的序列化實現。

2.1、選擇哪種序列化實現需要權衡的幾個因素

  • 序列化后的數據最好是易于人類閱讀的;
  • 實現的復雜度是否足夠低;
  • 序列化和反序列化的速度越快越好;
  • 序列化后的信息密度越大越好,也就是

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86209.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86209.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86209.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LINUX 622 SAMBA

SAMBA案例 user01通過wondows或linux在/samba/share 中創建、刪除文件 環境配置 samba安裝 [rootsamba caozx26]# yum install samba -y 已加載插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile 正在解決依賴關系 --> 正在檢查事務…

Linux Sonic Agent 端部署(詳細版)(騰訊云)

(因為服務器是Linux的,只是安裝了,并沒有驗證) 1、編輯docker-compose.yml文件 在Services下添加Agent sonic-agent:image: "sonicorg/sonic-agent-linux:v2.7.2"environment:- SONIC_SERVER_HOST${SONIC_SERVER_HOST…

SpringCloud學習筆記 - 2、關于Cloud各種組件的停更/升級/替換

文章目錄 前言SpringCloud是什么?SpringCloud 在 2018 年,技術體系SpringCloud 在 2020 年,“移除”了技術體系SpringCloud 在 2024 年,移除了技術體系SpringCloud 2024年,技術體系服務注冊與發現 模塊1、Eureka2、Con…

全面掌握 Nginx的功能和使用方法

從 C10K 到現代云原生 第一章 稀缺性哲學與 C10K 挑戰 Nginx 的誕生并非偶然,它是在特定歷史背景下,對一個嚴峻工程危機的直接而革命性的回應。要真正理解 Nginx 的設計精髓,我們必須回到 20 世紀末,探究那個催生了它的時代性難題…

[Linux] Vim編輯器 Linux輸入輸出重定向

Vim編輯器 Vim模式 command模式:該模式下鍵盤中的字母有特殊含義。如:G是跳轉到最后一行;gg是跳轉到第一行。 edit模式:在command模式下按i進入該模式。在該模式可以輸入內容。在該模式下按esc返回command模式。 extended com…

用Rust寫平衡三進制乘法器

1、平衡三進制乘法表 前面寫了平衡三進制的加法器,這個乘法器是在這基礎上的,沒看過的可以回去看看,說到乘法器還是要參考前蘇聯的資料的,平衡三進制的乘法也是很方便的,在平衡三進制基礎中有詳細講過,下圖…

解決Vue2官網Webpack源碼泄露漏洞

一:漏洞產生 Webpack是一個JavaScript應用程序的靜態資源打包器。大部分Vue等應用項目會使用Webpack進行打包,如果沒有正確配置,就會導致項目源碼泄露,可能泄露的各種信息如API、加密算法、管理員郵箱、內部功能等等。 F12查看源…

新中國風通用讀書頌詞分享PPT模版

新國風PPT模版,古風影視劇PPT模版,天青色中國風讀書頌詞分享會PPT模版,國風通用PPT模版,茶味PPT模版,風雪夜歸人PPT模版,小別離PPT模版,西江月茶詞PPT模版 新中國風通用讀書頌詞分享PPT模版&…

Rust自動化測試的框架

Rust實現Web自動化測試的框架 以下是10個使用Rust實現Web自動化測試的框架示例,涵蓋不同場景和工具鏈: 使用thirtyfour(基于Selenium) use thirtyfour::prelude::*;async fn example_selenium() -> WebDriverResult<()> {let caps = DesiredCapabilities::chro…

MySQL性能測試模板

引言&#xff1a;為什么MySQL性能測試如此重要&#xff1f; 你是否遇到過這些問題&#xff1a; 線上數據庫突然卡頓&#xff0c;QPS暴跌&#xff1f;業務高峰期MySQL服務器CPU 100%&#xff0c;卻找不到瓶頸&#xff1f;新功能上線后&#xff0c;數據庫性能不升反降&#xff…

第八課:大白話教你邏輯回歸

這節課咱們來聊聊 邏輯回歸(Logistic Regression),別看名字里有“回歸”,它其實是用來干 分類 的活兒的!我會用最接地氣的方式,從定義講到實戰,保證你笑著學會,還能拿去忽悠朋友! 一:邏輯回歸是啥?——當回歸想不開,轉行搞分類 1.1 定義:邏輯回歸是個“概率算命…

項目中后端如何處理異常?

為了統一管理異常&#xff0c;在項目中封裝了自定義異常類(BusinessException),全局異常處理器(GlobalExceptionHandler), 以及一些狀態碼(ErrorCode), 便于前端統一處理異常. 主要流程如下: 當項目業務發生邏輯錯誤時,會拋出BusinessException, 其中包含自定義錯誤碼和信息.…

群暉 NAS Docker 鏡像加速配置詳細教程

通過為群暉NAS的Docker配置鏡像倉庫加速服務&#xff0c;可顯著提升鏡像拉取速度與穩定性。本指南詳細介紹使用毫秒鏡像 (1ms.run) 服務的配置步驟及日常使用方法。 一、配置前準備 開始配置前&#xff0c;推薦使用毫秒鏡像的免登錄方式獲取鏡像倉庫地址。相比傳統的賬號密碼…

Deepoc行業垂直大模型作為行業知識與AI深度融合的專用工具

一、??行業專用智能診斷與預測性維護?? ??設備健康管理?? ??多源異構數據融合??&#xff1a;垂直大模型通過時序對齊算法&#xff08;如動態時間規整DTW&#xff09;整合振動&#xff08;5kHz&#xff09;、溫度&#xff08;1Hz&#xff09;、電流等多維度傳感器數…

內存泄漏系列專題分析之二十五:內存泄漏測試report Camera相機進程各種內存指標dump方式

【關注我,后續持續新增專題博文,謝謝!!!】 上一篇我們講了:內存泄漏系列專題分析之二十四:內存泄漏測試Camera相機進程內存指標分布report概述 這一篇我們開始講: 內存泄漏系列專題分析之二十五:內存泄漏測試report Camera相機進程各種內存指標dump方式 目錄 一、問…

mysql 加鎖算法 詳解

鎖 鎖分類 從鎖的操作劃分 共享鎖和排他鎖 共享鎖&#xff08;讀鎖&#xff09;和排他鎖&#xff08;寫鎖&#xff09;。對于更新語句&#xff0c;InnoDB會自動加上排他鎖&#xff1b;對于查詢語句&#xff0c;如果是快照讀&#xff0c;由于MVCC的存在&#xff0c;InnoDB不會…

使用EasyExcel導出帶下拉框選項excel模板

使用EasyExcel導出excel模版&#xff0c;表頭字段動態生成下拉框選擇&#xff0c;并且阻止輸入不符合下拉框選項的值&#xff0c;會在表格進行提示。 為了避免excel下拉框選項過多&#xff0c;導致下拉框內容不顯示&#xff0c;新建一個sheet頁&#xff0c;將下拉框內容存儲在…

自動化 UI 測試智能體在 Trae 平臺的部署體驗

我用Trae 做了一個有意思的Agent 「自動化 UI 測試」。 點擊 Trae - AI 原生 IDE 立即復刻&#xff0c;一起來玩吧&#xff01; 前言 用戶界面&#xff08;UI&#xff09;作為用戶與軟件交互的窗口&#xff0c;其質量直接影響用戶體驗和產品口碑。傳統的手動 UI 測試不僅效率…

身份證識別接口功能與應用場景-Android證件識別api集成

數字化信息高速發展的時代&#xff0c;信息的高效處理與精準識別已成為眾多行業發展的關鍵驅動力。針對聯網平臺身份核驗過程中&#xff0c;證件信息手動錄入效率低、出錯率高、用戶體驗差等問題推出了身份證識別接口&#xff0c;旨在為各行各業提供高效與便捷的身份核驗解決方…

POJ2718-Smallest Difference(窮竭搜索:全排列)

題目描述 給定一些不同的十進制數字&#xff0c;您可以通過選擇這些數字的一個非空子集并以某種順序編寫它們來形成一個整數。剩余的數字可以以某種順序寫下來形成第二個整數。除非結果整數為 0&#xff0c;否則整數可能不以數字 0 開頭。 例如&#xff0c;如果給定數字 0, 1…