<listing id="r7f1v"></listing>
<listing id="r7f1v"><var id="r7f1v"></var></listing><listing id="r7f1v"><cite id="r7f1v"><i id="r7f1v"></i></cite></listing>
<listing id="r7f1v"><cite id="r7f1v"></cite></listing>
<listing id="r7f1v"></listing>
<listing id="r7f1v"></listing>
<thead id="r7f1v"><cite id="r7f1v"></cite></thead>
<listing id="r7f1v"></listing>
<listing id="r7f1v"><cite id="r7f1v"></cite></listing>
<listing id="r7f1v"></listing>
<listing id="r7f1v"></listing>
<progress id="r7f1v"><var id="r7f1v"></var></progress>
<listing id="r7f1v"></listing>
APP開發平臺 > Blog > Json序列化算法介紹

一、JSON介紹

全名:JavaScript Object Notation

戶籍:Json是一種輕量級數據交換格式,它采用的是完全獨立于編程語言之外的文本格式,同時它也使用了類似c家族的習慣,這些特性使得json成為最理想的數據交換語言。

特點:

1)JSON文本格式的本質就是具有特定格式的字符串

2)JSON比XML的傳有效性更高

二、JSON的數據格式

示例:


String json1 = "{"id":1,"name":"Tom"}";

String json2 = "[12,"abc",{"id":1,"name":"Tom"}]";

JSON有兩種數據格式:JSON對象和JSON數組,如上示例所示,json1為JSON對象,json2為JSON數組

三、Json序列化

1、什么是序列化算法?

json 是一種序列化的算法,那么說回來了,什么是序列化算法?

序列化和反序列本質上就是對象和字節數組的轉換:

序列化時,將Java對象編碼為byte數組

反序列化,則是將byte數組轉換為Java對象

2、為什么要使用序列化算法?

很多剛入門的同學都會對比特,字節,乃至字比較反感,對01代碼和十六進制都覺得非常的不熟悉,進而心生畏懼,認為字符串比字節數組方便的多,可讀性也非常高,為什么不能用字符串來進行交流,而總有地方都要使用討厭的字節。


2.1為什么要用二進制,八進制,十六進制?

對于計算機的底層來說,cpu上運行的都是01二進制的指令,而內存和磁盤中存儲的數據也是二進制的,這是由于二進制本身的穩定性而決定的,簡單來說就是計算機中的模擬信號數據波形并不是理想的高低有致的,更多的是處于不停波動的狀態(可以理解成是極值不斷變化的sin函數),這就會導致將波形轉換為可操作的數字信號的時候就會非常困難,針對這樣的波形特征如果再進行分段比如說xxx頻到xxx頻是2,xx頻到xx頻是3,顯然是非常不易的,但是如果只區分為高低兩種信號就很容易去定義信息,這就是二進制的穩定性。

而一個二極管能表示一位二進制,兩個就是兩位,八個就是八位,顯然用很多個00001111101不容易去表示數據,而用可讀性比較好的8進制和十六進制相對來說就更容易表示了,如果說為什么不用十進制,因為十進制不是2的整數次


2.2為什么要用字節數組

在計算機的計算和數據存儲中都是用的01比特,那么在計算機網絡的通信中最底層顯然也是通過比特流進行數據傳輸的。而OSI計網架構來說,數據傳輸的單位顯然是對比特又進行了一次封裝,也就是字節。


計算機網絡中運輸層(為我們的數據傳輸提供可靠服務的一層,在計算機的網卡中集成)的傳輸單位是字節,而我們做網絡編程其實就是在面向Socket(運輸層數據傳輸的門戶,端點)進行數據的傳輸,將數據轉換為字節流交給網卡中集成好的運輸層協議,然后運輸層就會通過網絡將我們的數據送到到目的地址,從應用層的角度看這一過程就是將http 請求報文轉換為字節數組傳遞給socket,然后得到響應的字節數組,并將字節數組轉換為http響應報文

2.3這和序列化算法有什么關系?

序列化就是將對象轉換為字節數組,而在網絡編程中傳輸的就是字節數組,配置序列化算法就是通過將對象轉換為字節然后作為數據信息進行傳遞。

2.4序列化算法和協議有什么關系

我們都知道Http協議分為三部分:行,頭,體,在行和頭中放置的是協議的控制信息,而在體中放置的是數據的傳輸信息,而http協議同時也支持將傳輸的數據信息放到行中,也就是url 中進行數據的傳輸,但真正的數據傳輸往往都是在體中進行傳輸的,這就說到了網絡協議制定的一個核心思想:協議頭部(控制信息部分)和數據部分。

也就是說:將協議的控制信息都放到頭部,將協議的數據內容都放到數據部分,而對于下面的http 協議來說,行和頭其實就是協議頭部,而體則是數據部分,而已經使用過json的同學,不管是用的servlet 原生的request.getOutpuStream 進行寫入,還是springmvc @ResponseBody ,其實都是將對象轉換為字節數組。其實都是寫入到http協議的數據部分,也就是請求體和響應體中 。

也就說:在我們簡單使用的網絡編程中的序列化算法就是將對象編碼為字節數組,然后將字節數組寫入到http協議體中,這就是序列化算法在協議中應用的本質。

來APICloud移動應用開發平臺學習更多APP開發知識:app開發,app制作,app開發源碼下載,app開發框架,app制作模板等免費獲取。

APICloud-專業APP開發、app定制服務商,提供一站式移動應用解決方案,滿足您的各類需求,歡迎免費評估需求和獲取報價。

 

立即免費在線制作一個APP,新手注冊即送開發大禮包

提交app定制需求,免費獲取報價和周期:

電腦請點擊https://app.apicloud.com/index?uzchannel=500

手機請點擊http://www.cvrender.com/m/customizedservice


高效的App定制平臺,標準化、便宜、快!

提交APP定制開發需求
欧美激情一区二区,国产精品区免费视频,欧美激情视频在线播放,久久久亚洲综合久久98,久久国产精品99精品国产