序列化及反序列化接口類

最近在寫通信項目的時候遇到了個最主要的問題,用java寫客戶端的時候,與服務(wù)端進行通信的時候不能直接傳json或者是對象,只能用byte數(shù)組,這時候就需要將對象轉(zhuǎn)換為byte數(shù)組

必須注意的一點啊:bytes在反序列化為Object的前提是byte[]是通過ObjectOutputStream序列化的,也就是說序列化和反序列化是有格式的,并不是一個隨便的byte數(shù)組就能被反序列化的

1.什么是序列化呢呵反序列化呢?

序列化:指把堆內(nèi)存中的java對象數(shù)據(jù),通過某種方式傳遞給 某個網(wǎng)絡(luò)節(jié)點,(在網(wǎng)絡(luò)上傳輸),這個過程就叫做序列化。通俗即為將數(shù)據(jù)結(jié)構(gòu)或?qū)ο筠D(zhuǎn)換為二進制串的過程

反序列化:把磁盤文件中的對象數(shù)據(jù)或者網(wǎng)絡(luò)節(jié)點上的對象數(shù)據(jù)(即二進制數(shù)據(jù)),轉(zhuǎn)換為java對象模型的過程

2.java怎么進行序列化呢?

a.需要做序列化的類,必須實現(xiàn)序列化接口,java.lang.Serializable接口這是一個標(biāo)志接口,沒有任何抽象方法),Java 中大多數(shù)類都實現(xiàn)了該接口,比如:String,Integer

b.底層會判斷,如果當(dāng)前對象是Serializable的實例,才允許被序列化

c.java中使用對象流來實現(xiàn)序列化和反序列化

ObjectOutputStream:通過 writeObject()方法做序列化操作 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??ObjectInputStream:通過 readObject() 方法做反序列化操作

3.java中序列化和反序列化的接口類:

public class ObjectAndByte {

/**

* 對象轉(zhuǎn)數(shù)組

? ? * @param obj

? ? * @return

? ? */

? ? public byte[]toByteArray (Object obj) {

byte[] bytes =null;

? ? ? ? ByteArrayOutputStream bos =new ByteArrayOutputStream();

? ? ? ? try {

ObjectOutputStream oos =new ObjectOutputStream(bos);

? ? ? ? ? ? oos.writeObject(obj);

? ? ? ? ? ? oos.flush();

? ? ? ? ? ? bytes = bos.toByteArray ();

? ? ? ? ? ? oos.close();

? ? ? ? ? ? bos.close();

? ? ? ? }catch (IOException ex) {

ex.printStackTrace();

? ? ? ? }

return bytes;

? ? }

/**

* 數(shù)組轉(zhuǎn)對象

? ? * @param bytes

? ? * @return

? ? */

? ? public ObjecttoObject (byte[] bytes) {

Object obj =null;

? ? ? ? try {

ByteArrayInputStream bis =new ByteArrayInputStream (bytes);

? ? ? ? ? ? ObjectInputStream ois =new ObjectInputStream (bis);

? ? ? ? ? ? obj = ois.readObject();

? ? ? ? ? ? ois.close();

? ? ? ? ? ? bis.close();

? ? ? ? }catch (IOException ex) {

ex.printStackTrace();

? ? ? ? }catch (ClassNotFoundException ex) {

ex.printStackTrace();

? ? ? ? }

return obj;

? ? }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容