⑴ java fastjson 序列化、反序列化
不行就分步反序列化
1.得到各個JSON Object的反序列化,包括mods_description要定義為String.
2.講mods_description這個JSON Array再反序列化。注意這個是json array,要用List.
⑵ java中map集合反序列化
out.writeInt(num2);
//這最好,再添加一個goods數量的整數
out.writeObject(goods);
按上面的順序,使用ObjectInputStream反過來逐個讀就是了
~
~
~
⑶ Java序列化和hessian序列化的區別
在遠程調用中,需要把參數和返回值通過網路傳輸,這個使用就要用到序列化將對象轉變成位元組流,從一端到另一端之後再反序列化回來變成對象。
既然前面有一篇提到了hessian,這里就簡單講講Java序列化和hessian序列化的區別。
首先,hessian序列化比Java序列化高效很多,而且生成的位元組流也要短很多。但相對來說沒有Java序列化可靠,而且也不如Java序列化支持的全面。而之所以會出現這樣的區別,則要從它們的實現方式來看。
先說Java序列化,具體工作原理就不說了,Java序列化會把要序列化的對象類的元數據和業務數據全部序列化從位元組流,而且是把整個繼承關繫上的東西全部序列化了。它序列化出來的位元組流是對那個對象結構到內容的完全描述,包含所有的信息,因此效率較低而且位元組流比較大。但是由於確實是序列化了所有內容,所以可以說什麼都可以傳輸,因此也更可用和可靠。
而hessian序列化,它的實現機制是著重於數據,附帶簡單的類型信息的方法。就像Integer
a
=
1,hessian會序列化成I
1這樣的流,I表示int
or
Integer,1就是數據內容。而對於復雜對象,通過Java的反射機制,hessian把對象所有的屬性當成一個Map來序列化,產生類似M
className
propertyName1
I
1
propertyName
S
stringValue(大概如此,確切的忘了)這樣的流,包含了基本的類型描述和數據內容。而在序列化過程中,如果一個對象之前出現過,hessian會直接插入一個R
index這樣的塊來表示一個引用位置,從而省去再次序列化和反序列化的時間。這樣做的代價就是hessian需要對不同的類型進行不同的處理(因此hessian直接偷懶不支持short),而且遇到某些特殊對象還要做特殊的處理(比如StackTraceElement)。而且同時因為並沒有深入到實現內部去進行序列化,所以在某些場合會發生一定的不一致,比如通過Collections.synchronizedMap得到的map。
⑷ java反序列化的時候是怎麼創建對象的呢
其實就是讀取正常應該被序列化的欄位信息後,再構造出一個map,再通過對象流,將原有通過對象流寫進文件裡面的map信息(容量,每個item信息等)全部讀取出來,然後重新構造一個map,這樣就使得我們保存在set裡面的信息,在經歷過對象流的序列化和反序列化後,都沒有丟失。
⑸ java怎麼把對象序列化成.json文件
首先引用json 對應的jar包
1.commons-lang.jar
2.commons-beanutils.jar
3.commons-collections.jar
4.commons-logging.jar
5.ezmorph.jar
6.json-lib-2.2.2-jdk15.jar
實現方法就是 JSONObjectjson = JSONObject.fromObject(map);
⑹ java問題
其他別人都答了。
8> java中的Collection Framework是指Collection 事一個父類子類有List和Set,繼承List的有arrayList和LinkedList 以及vector這三者的區別的是:arrayList顧名思義是已數組實現的,就是說裡面的存儲方式同數組差不多,但是非線程安全的即事非同步的(同步不需要說了吧)vector就是線程安全的,JDK的源碼中可以看到vector中的很多方法都是synchronized的,效率肯定低於非同步的。然後就是linkedlist,linkedlist不同於數組存儲它是雙向鏈表實現的,即一個對象除了本身數據之外還有前後兩個元素的引用,所以插入很刪除很方便,但是效率低於arraylist。
還有一個集合類就是MAP,子類有hashmap和hashtable。hashmap不允許重復的鍵允許重復的值,而且hashmap是非線程安全的而hashtable則是線程安全的效率低於hashmap,HashMap允許null key和null value,而hashtable不允許。(繼承關系就是collection和map為父類,繼承collection的子介面是LIST和Set和Queue,而MAP得子介面則是hashmap和hashtable),當然還有一個set和Queue你可以自己去。(我是憑記憶說的給你個大概的意象,讓你明白什麼是集合類(java),具體的還要自己去學)。
9 >介面一個特別的抽象類,介面用interface來定義,抽象類用abstract來定義,其實這兩者的區別網上很多,我說我用的體會。abstract(抽象類)是為了繼承而設計,其實這也要符合父類的設計就是單純為了讓子類繼承來設計的,抽象類比起介面更側重與屬性,即可以定義一些公用需要被子類繼承的屬性。而interface(介面)則是java類的類型即TYPE,如果一些類你覺得他們屬於相同的TYPE則可以使用介面,interface比起abstract更側重於方法。當然interface和abstract的特點你應該知道。
10>網上一大把,我自己在項目中很少接觸到socket所以就不做不負責任的回答了。
11>1>冒泡排序,和選擇排序依據插入排序。介於篇幅我就不寫例子來說明了。
2>java序列化就是把對象流化,可以存在本地磁碟或者在網路之間傳輸,需要實現Serializable介面(注意這里的存儲在本地磁碟並不是把一個java文件保存在本地文件,比如你有一個類裡面有name,age等屬性,現在setName(「name」),setAge(11),如果這個類的屬性就有值了,你可以將這個對象寫入文件,待到讀到程序中的時候就訪問到這些屬性值了)。
3>需要實現comparable介面(<effective java>這本書裡面有重點闡述這個問題)
12>String在JDK源碼中被定義成final的也就是不可變的,譬如你定義了一個String s = "a";也就是s為不可變的,如果你對S進行+操作即說s=s+"b";如此S便改變了,不符合final語法,所以在進行+操作後回重新在內存中生成一個對象,如果你的S精彩變動則需要考慮使用StringBuffer,它是長度可變的。
⑺ java map對象轉位 json對象,或者只要是用jquery ajax刷新數據就行
後台:比如是一個Struts的Actioinpublic String xxx() { Map map = .XX(idvalue); JSONOjbect json = new JSONOjbect(); json.put("propName1", map.get(0)); json.put("propName2", map.get(1)); // 一直寫完 PrintWriter out = ServletActionContext.getResponse().getWriter(); out.print(json.toString()); out.flush(); return null;} 前台jquery$.getJSON('url/xx!xxx.action", {json格式的請求參數}, callback}; function callback(data) { $(#yourInputId).val(data);}
⑻ Java 用Map好還是用JSONObject好
如果只用一次,那麼map接收能達到使用條件即可,如果是已有相應實體,可以用JSONObject,方便對數據做處理
⑼ 困惑,java序列化replaceWrite和readObject的問題
原因很簡單:
因為你在writeReplace方法里,將要序列的對象由Student替換成了HashMap。
那麼,在反序列化的時候,就不會再調用Student中的readObject方法了。而是調用的是HashMap這個類中的readObject方法,即直接返回了你序列化時替換的那個HashMap。
⑽ java.io.serializable中可以定義map嗎
聽我慢慢道來
類通過實現java.io.Serializable介面可以啟用其序列化功能。未實現次介面的類無法使其任何狀態序列化或反序列化。可序列化類的所有子類型本身都是可序列化的。序列化介面沒有方法或欄位,僅用於標識可序列化的語義。
Java的"對象序列化"能讓你將一個實現了Serializable介面的對象轉換成byte流,這樣日後要用這個對象時候,你就能把這些byte數據恢復出來,並據此重新構建那個對象了。
在序列化時,有幾點要注意的:
1:當一個對象被序列化時,只保存對象的非靜態成員變數(包括聲明為private的變數),不能保存任何的成員方法和靜態的成員變數。
2:如果一個對象的成員變數是一個對象,那麼這個對象的數據成員也會被序列化。
3:如果一個可序列化的對象包含對某個不可序列化的對象的引用,那麼整個序列化操作將會失敗,並且會拋出一個NotSerializableException。我們可以將這個引用標記為transient,那麼對象仍然可以序列化。
那麼回來題主的問題, java.io.serializable中可以定義map嗎?
這個要視 map的實現類而定
如果實現了是java.util.HashMap 是可以的,因為他實現了java.io.Serializable 介面