1. 程式人生 > >171207之java中的JSON序列化問題

171207之java中的JSON序列化問題

注意:json和序列化沒什麼太大的關係。

問題:
第一,我們說的前後臺用json傳輸,json不只是一種資料格式麼,所以傳輸的時候就寫成json格式,像form表單提交一樣傳輸資料不就可以了?
答:form表單提交是同步提交。json主要用於ajax非同步提交,json就是一種資料格式,跟xml格式是一樣的,只是前臺解析json格式比較方便而已

第二,什麼叫轉化為二進位制,難道form表單的資料或者所有網路傳輸的資料不都是二進位制010101麼,那什麼還要轉二進位制呢?
答:說的java序列化其實沒有那麼深奧,簡單的講,正常的字元是不能在網路間傳輸的,java物件或者資料要傳輸就需要做序列化處理。所以序列化只是為了能在網路上傳輸。

第三,我所理解的序列化就是把它像儲存檔案一樣儲存在記憶體或本地,傳輸json為何要先儲存(序列化)在本地,再傳輸呢?
答:同二,要在網路上傳輸就需要做序列化處理。

第四,網路傳輸的資料不都是二進位制010101麼 ?
是的,不管是用json、xml、還是序列化成二進位制,底層的網路傳輸都是一樣的,所以你不用關注底層網路傳輸,我們關注的是應用層。

我理解的應用層的介面序列化有 :
1、json、xml序列化 這個是走http協議的
2、二進位制序列化,比如hessian等等,這個是走tcp協議的

廣義上來講:json、xml、protobuf都屬於序列化物件的方式,跨語言。
狹義的講:Java的Serializable介面,只限Java程式。

案例:
你是完全可以往另一臺機器發1001011010…..但是對方不知道怎麼解析啊,八個一讀16個一讀誰知道啊。你這邊是有原始碼,有型別定義,你知道偏移量多少到多少的記憶體位置是一個int,另一段是個double,你是知道的(你不知道的話你的高階語言也能知道)。

好比你把jpg副檔名改成txt,資料內容根本沒變,還是原來的東西,但是你一開啟就亂碼了。讓對面機器知道你發的是個什麼東西還是有必要的所以需要先弄成對面看得懂的樣子,在搞一遍,發過去。