国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

自己做家具展示網站優(yōu)化seo深圳

自己做家具展示網站,優(yōu)化seo深圳,做網站的步驟是什么,旅游網站建設要如何做這里寫目錄標題 前言1. 序列化1.1 網絡通信中的問題分析1.2 常用的序列化方式 2. protobuf2.1 操作流程 總結 前言 Protocol Buffers(protobuf)是一種輕量級的數據交換格式,可以用于結構化數據的序列化和反序列化。它使用二進制格式來編碼數據…

這里寫目錄標題

  • 前言
  • 1. 序列化
    • 1.1 網絡通信中的問題分析
    • 1.2 常用的序列化方式
  • 2. protobuf
    • 2.1 操作流程
  • 總結

前言

Protocol Buffers(protobuf)是一種輕量級的數據交換格式,可以用于結構化數據的序列化和反序列化。它使用二進制格式來編碼數據,以提高傳輸效率和數據壓縮比。

在protobuf中,我們可以使用.proto文件來定義消息類型,并使用編譯器生成針對各種編程語言的序列化和反序列化代碼。序列化是將結構化數據轉換為一系列字節(jié)的過程,反序列化則是將字節(jié)流解析為結構化數據的過程。

序列化的過程通常涉及以下步驟:

定義消息類型:使用.proto文件定義消息類型和字段。

編寫應用程序:編寫應用程序,創(chuàng)建消息對象并填充字段。

序列化數據:使用protobuf庫,將消息對象序列化為字節(jié)數組。

傳輸數據:將字節(jié)數組發(fā)送給接收方。

反序列化數據:接收方使用protobuf庫,將字節(jié)數組反序列化為消息對象,并訪問其中的字段。

在序列化過程中,protobuf使用壓縮技術來減小數據的大小,從而提高傳輸效率。此外,protobuf支持向前和向后兼容的特性,可以使得我們在更新消息類型時,不會破壞現(xiàn)有的序列化數據

1. 序列化

序列化 (Serialization)將對象的狀態(tài)信息轉換為可以存儲或傳輸的形式的過程,與之相對應的過程稱之為反序列化(Unserialization)。序列化和反序列化主要用于解決在跨平臺和跨語言的情況下, 模塊之間的交互和調用,但其本質是為了解決數據傳輸問題。

實現(xiàn)數據序列化:

  • 要有原始數據
    • 復合類型 -> 最常見的情況
    • 基礎數據類型
  • 通過某些方式 -> 另外一種形式的數據
  • 得到的數據干啥? -> 目的: 進行分發(fā), 分發(fā)到不同的終端/平臺, 保證不同的平臺能正確解析
    • 網絡傳輸
    • 磁盤拷貝

序列化目的不是為了加密, 為的是數據的跨平臺傳輸

序列化的整體過程:

  • 發(fā)送端
    • 原始數據 -> 序列化 (編碼) -> 特殊格式的字符串
    • 發(fā)送這個字符串
  • 接收端:
    • 接收數據
    • 特殊格式的字符串 -> 反序列化 (解碼) -> 原始數據
    • 對原始數據進行處理

1.1 網絡通信中的問題分析

發(fā)送過程中遇到的一些問題?

  • 平臺不同

  • 如果不是字符串, 需要進行字節(jié)序轉換

  • 語言不同

  • 字節(jié)對齊問題

1.2 常用的序列化方式

  1. XML( Extensible Markup Language )類似于html

    XML是一種常用的序列化和反序列化協(xié)議,具有跨機器,跨語言等優(yōu)點。XML歷史悠久,其1.0版本早在1998年就形成標準,并被廣泛使用至今。

    XML的最初產生目標是對互聯(lián)網文檔進行標記,所以它的設計理念中就包含了對于人和機器都具備可讀性。 但是,當這種標記文檔的設計被用來序列化對象的時候,就顯得冗長而復雜。
    XML基本格式:

   <?xml version="1.0" encoding="utf-8"?><Library><Type name="小說"><Book author="J.K.ROWLING" price="12$">哈利波特1</Book><Book author="J.K.ROWLING" price="12$">哈利波特2</Book><Book author="J.K.ROWLING" price="12$">哈利波特3</Book><Book author="J.K.ROWLING" price="12$">哈利波特4</Book></Type><Type name="歷史"><Book author="司馬遷" price="20$">史記</Book></Type></Library>
  1. Json( JavaScript Object Notation )

JSON起源于弱類型語言Javascript,它的產生來自于一種稱之為"關聯(lián)數組(Associative array)"的概念,其本質是就是采用"鍵值對"的方式來描述對象。

JSON格式保持了XML的人眼可讀的優(yōu)點,非常符合工程師對對象的理解。

相對于XML而言,序列化后的數據更加簡潔(XML所產生序列化之后文件的大小接近JSON的兩倍),而且其協(xié)議比較簡單,解析速度比較快。

JSON格式具備Javascript的先天性支持,所以被廣泛應用于Web browser的應用常景中,是Ajax的事實標準協(xié)議。

// json是一種數據格式, 不是語言, 和平臺語言無關
// json數組
[整形, 浮點型, 布爾類型, 字符串, json數組, json對象]
[12, 12.44, true, "hello", [1,2,3]]
// json對象
{"key":"value"
}
json對象中是n個鍵值對
key: 必須是字符串
value: 整形浮點型布爾字符串json數組json對象注意事項:在一個文件中只能存儲一個大的數組或者對象, 但是可以嵌套使用原素和原始之間使用逗號間隔(一個鍵值對視為一個元素)最后一個元素后邊沒有逗號{"lilii":"717","tom":"nihao","lucy":"yyyyhhhh"
}["潔潔", "姐姐"]{"潔潔":{"father":"張三","mother":"xxx","sister""xxx","favorite":["跳舞", "唱歌", "游泳"]}"姐姐":{}
}
  1. Protocol Buffer

  2. ASN.1 抽象語法標記(Abstract Syntax Notation One)

  3. boost 序列化的類

2. protobuf

Protobuf是一個純粹的展示層協(xié)議,可以和各種傳輸層協(xié)議一起使用,Protobuf的文檔也非常完善。google 提供了多種語言的實現(xiàn):java、c#、c++、go 和 python,每一種實現(xiàn)都包含了相應語言的編譯器以及庫文件。

Protobuf支持的數據類型相對較少,不支持常量類型。由于其設計的理念是純粹的展現(xiàn)層協(xié)議,目前并沒有一個專門支持Protobuf的RPC框架。

2.1 操作流程

  • 準備數據
    • 復合類型: 結構體/ 類
  • 基礎類型
  • 創(chuàng)建一個新文件 xxx.proto
  • 將我們要序列化的數據 -> 寫入到proto文件
    • 注意寫入有語法格式
  • 通過命令 protocxxx.proto文件生成一個c++的類
    • 會生成一個頭文件/ 源文件
    • 操作命令-> 在window終端中: protoc xxx.proto --cpp_out=./
  • 使用這兩個文件
    • 文件里有對數據操作的api
      • 讀數據 API
        • 方法名字 變量名()
      • 寫數據 API
      • 方法名字: set_變量名(arg)
      • 等等API
// 要序列化的數據
struct Persion
{int id;string name;string sex;	// man womanint age;
};int id;
  • 在.proto文件中定義消息格式

    // protobuf的版本
    syntax = "proto3";	// proto2
    // 組織Persion結構體
    // 語法格式
    message 關鍵字(相當于被創(chuàng)建出的類的名字)
    {// 成員變量數據類型 變量名 = 變量的編號;	// 編號從1開始, 不能重復
    }// .proto文件 生成 c++ 類的命令
    protoc proto文件名 --cpp_out=生成目錄
    

具體轉換類型規(guī)則如下所示:

.proto類型C++類型備注
doubledouble64位浮點數
floatfloat32位浮點數
int32int3232位整數
int64int6464位整數
uint32uint3232位無符號整數
uint64uint6464位無符號整數
sint32sint3232位整數,處理負數效率比int32更高
sint64sint6464位整數,處理負數效率比int64更高
fixed32uint32總是4個字節(jié)。如果數值總是比總是比228大的話,這個類型會比uint32高效。
fixed64uint64總是8個字節(jié)。如果數值總是比總是比256大的話,這個類型會比uint64高效。
sfixed32int32總是4個字節(jié)
sfixed64int64總是8個字節(jié)
boolbool布爾類型
stringstring一個字符串必須是UTF-8編碼或者7-bit ASCII編碼的文本
bytesstring處理多字節(jié)的語言字符、如中文
enumenum枚舉
messageobject of class自定義的消息類型
  • repeated限定修飾符

用于定義一個字段可以包含多個值。它只能應用于特定的字段類型,例如int32、string等。

使用repeated修飾符可以定義一個重復字段,表示該字段可以包含一個或多個值,并以列表的形式進行存儲和傳輸。這使得我們能夠在一個字段中存儲多個相關的數據,而無需定義多個獨立的字段。

以下是一個示例,展示了如何使用repeated修飾符創(chuàng)建一個重復字段:

message MyMessage {repeated int32 numbers = 1;repeated string names = 2;
}

在上述示例中,numbers字段和names字段都被修飾為repeated,允許存儲多個整數和字符串值。

通過使用repeated修飾符,我們可以輕松地處理包含多個值的字段,例如迭代訪問、添加和刪除元素等操作。

  • 枚舉

枚舉類型是一種定義常量值列表的方式,用于表示一組相關的命名常量。它可以在消息類型中定義,并用于描述消息類型中的字段。

以下是一個示例,展示了如何使用protobuf中的枚舉類型:

  // 定義枚舉
enum PhoneType {MOBILE = 0;// protbuf中第一個枚舉值必須為0HOME = 1;WORK = 2;
}message Person {string name = 1;repeated PhoneNumber phones = 2;
}message PhoneNumber {string number = 1;PhoneType type = 2; // 枚舉變量
}

在上述示例中,我們定義了一個PhoneType枚舉類型,其中包含三個常量值:MOBILE、HOME和WORK。這個枚舉類型用于描述電話號碼的類型,包括移動電話、家庭電話和工作電話。

然后,我們在PhoneNumber消息類型中使用了這個枚舉類型,將電話號碼與電話類型關聯(lián)起來。這樣,我們就可以輕松地區(qū)分不同類型的電話號碼,并按照類型進行處理。

在protobuf中,枚舉類型的值對應一個整數,可以使用=操作符為其指定具體的值。默認情況下,第一個枚舉值的值為0,后續(xù)的枚舉值依次遞增。如果需要指定特定的值,可以使用類似于MY_ENUM_VALUE = 100;這樣的語法進行設置。

  • proto文件的導入

    // Persion.proto
    syntax = "proto3";
    // 導入另外一個proto文件
    import "Info.proto";enum Color
    {Red = 0;	// protbuf中第一個枚舉值必須為0Green = 6;Blue = 9;
    }message Persion
    {int32 id = 1;   // 編號從1開始repeated bytes name = 2;string sex = 3;int32 age = 4;Color color = 5;Info info = 6;	// Info對象, 導入的proto文件中的類
    }
    
    // Info.proto
    syntax = "proto3";message Info
    {bytes address = 1;  // 地址int32 number = 2;   // 門牌號
    }
    
  • 包 -> 命名空間

    // Persion.proto
    syntax = "proto3";
    // 導入另外一個proto文件
    import "Info.proto";
    // 添加命名空間
    package itcast;	// Persion類屬于itcast這個命名空間enum Color
    {Red = 0;	// protbuf中第一個枚舉值必須為0Green = 6;Blue = 9;
    }message Persion
    {int32 id = 1;   // 編號從1開始repeated bytes name = 2;string sex = 3;int32 age = 4;Color color = 5;// 命名空間.類名itheima.Info info = 6;	// Info對象, 導入的proto文件中的類
    }
    
    // Info.proto
    syntax = "proto3";
    // Persion類屬于itheima這個命名空間
    package itheima;message Persion
    {bytes address = 1;  // 地址int32 number = 2;   // 門牌號
    }
    
  • 使用protobuf編譯器生成C++類

    # protobuf編譯器, 編譯源碼得到的 protoc.exe
    # 語法
    # --cpp_out 生成的c++類的位置
    protoc.exe xxx.proto --cpp_out=目錄
    
  • 使用C++ API來讀寫消息

    • 讀: 變量名()
    • 寫: set_變量名(arg1, arg2, ...)

總結

  • 效率和緊湊性:protobuf使用二進制編碼,提供了高效的數據傳輸和緊湊的數據存儲,相對于文本格式,可以節(jié)省帶寬和存儲空間。

  • 跨平臺和可擴展性:protobuf支持多種編程語言,包括C++、Java、Python等,可以在不同平臺和語言之間進行數據交換。它還支持向前和向后兼容,可以在消息類型更新時保持數據的兼容性。

  • 結構化數據定義:protobuf使用.proto文件來定義消息類型和字段,提供了結構化的數據模型,使得數據的組織和訪問更加清晰和靈活。

  • 強類型和類型安全:protobuf使用強類型系統(tǒng),可以在編譯時檢查類型錯誤,避免在運行時出現(xiàn)錯誤。這提供了更好的類型安全性和代碼可靠性。

  • 支持多種數據類型:protobuf支持各種基本數據類型(如整數、字符串、布爾值等),以及復雜的數據類型(如嵌套消息、枚舉等),可以靈活地描述和處理各種數據結構。

  • 序列化和反序列化:protobuf提供了自動生成的序列化和反序列化代碼,使得數據的序列化和反序列化過程簡單而高效。它還支持壓縮技術,可以減小數據大小,提高傳輸效率。

  • 可讀性和可維護性:由于protobuf使用結構化的數據模型和明確的消息類型定義,使得代碼更具可讀性和可維護性。同時,它也提供了版本控制機制,方便進行更新和演進。

http://m.aloenet.com.cn/news/45109.html

相關文章:

  • 昆明網站建設價目表最新軍事消息
  • 網站建設師百度百科網絡輿情監(jiān)測
  • 石家莊建站網頁模板百度人工服務
  • 源碼建站之網站建設搜索引擎平臺有哪些軟件
  • 做菠菜網站有沒有被騙的百度瀏覽器官方網站
  • 南京微信網站建設百度我的訂單查詢
  • 唐山網站建設費用seo排名公司
  • iis 網站文件被占用seo優(yōu)化多久能上排名
  • 用dw做旅游網站的方法權重查詢
  • 比較厲害的網站制作公司重慶seo整站優(yōu)化外包服務
  • 淘客做網站怎么備案百度一下百度官網
  • 用國外網站 圖片做自媒體福州seo公司排名
  • 動態(tài)網頁設計個人簡歷代碼seo宣傳網站
  • 銷售seo是什么的
  • 貸款織夢網站模版網絡營銷策略分析論文
  • 國外高校實驗室網站建設成果廣告聯(lián)盟論壇
  • 網站建設的seo策略信息流廣告投放渠道
  • 網站建設高清圖片刷百度關鍵詞排名優(yōu)化
  • iis 部署wordpressseo刷詞
  • asp網站頁面設計外鏈兔
  • 網站設計外文文獻廣州關鍵詞排名推廣
  • 微信導購網站怎么做視頻教學百度推廣客服
  • 網站建設 中山自己網站怎么推廣
  • 找做網站的客戶百度統(tǒng)計api
  • vip視頻網站怎么做百度下載安裝到桌面
  • 大連建站公司友情鏈接交易網
  • 網站優(yōu)化排名資源怎樣建立一個網絡銷售平臺
  • 新沂微網站開發(fā)臨沂seo推廣外包
  • 建設部網站資質人員查詢今日新聞
  • 中國建設銀行重慶網站首頁網絡營銷策略實施的步驟