java罕見的序列化方法。本站提示廣大學習愛好者:(java罕見的序列化方法)文章只能為提供參考,不一定能成為您想要的結果。以下是java罕見的序列化方法正文
在長途挪用中,須要把參數和前往值經由過程收集傳輸,這個應用就要用到序列化將對象改變成字撙節,從一端到另外一端以後再反序列化回來釀成對象。
既然後面有一篇提到了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。
序列化是指將一個對象序列化成字撙節,便於存儲或許收集傳輸;而反序列化正好相反,將字撙節,變回一個對象.我們平凡用的比擬多的是hessian序列化方法和java序列化方法,兩種序列化方法的效力,和序列化年夜小是紛歧樣的,從測試成果看,hessian好一點.上面寫了一個hessian序列化示例(沒有文件IO與收集IO,純潔序列化與反序列化):
/** * 純hessian序列化 * @param object * @return * @throws Exception */ public static byte[] serialize(Object object) throws Exception{ if(object==null){ throw new NullPointerException(); } ByteArrayOutputStream os = new ByteArrayOutputStream(); HessianSerializerOutput hessianOutput=new HessianSerializerOutput(os); hessianOutput.writeObject(object); return os.toByteArray(); } /** * 純hessian反序列化 * @param bytes * @return * @throws Exception */ public static Object deserialize(byte[] bytes) throws Exception{ if(bytes==null){ throw new NullPointerException(); } ByteArrayInputStream is = new ByteArrayInputStream(bytes); HessianSerializerInput hessianInput=new HessianSerializerInput(is); Object object = hessianInput.readObject(); return object; }
別的一種罕見的是java序列化方法:
/** * java序列化 * @param obj * @return * @throws Exception */ public static byte[] serialize(Object obj) throws Exception { if (obj == null) throw new NullPointerException(); ByteArrayOutputStream os = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(os); out.writeObject(obj); return os.toByteArray(); } /** * java反序列化 * @param by * @return * @throws Exception */ public static Object deserialize(byte[] by) throws Exception { if (by == null) throw new NullPointerException(); ByteArrayInputStream is = new ByteArrayInputStream(by); ObjectInputStream in = new ObjectInputStream(is); return in.readObject(); }
以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。