文章插圖

文章插圖
1. 介紹
【php反序列化函數 php序列化和反序列化】1.1 介紹
福哥最近在把一部分功能從PHP轉入Java里面,在處理PHP的序列化(Serialize)數據的時候遇到了問題,經過一番折騰找到了一個在Java里實現序列化的功能的第三方庫 。
現在,福哥將這個庫的使用方法交給大家?。?br /> 2. 依賴
首先導入phprpc的依賴庫
<dependency><groupId>org.sction</groupId><artifactId>phprpc</artifactId><version>3.0.2</version></dependency>3. 使用使用PHPSerializer反序列化經過PHP序列化過的字符串需要知道目標字符串里存的是什么類型的數據,不同的數據類型是需要使用不同的實體對象去接收反射數據的 。
3.1 單字符串類型
原數據就是一個字符串
try{PHPSerializerps=newPHPSerializer();Strings;s=(String)ps.unserialize(newString("s:12:"福哥真好";").getBytes(),String.class);returns;}catch(Exceptione){e.printStackTrace();}原數據就是一個整型數字
try{PHPSerializerps=newPHPSerializer();Integers;s=(Integer)ps.unserialize(newString("i:518168;").getBytes(),Integer.class);returns;}catch(Exceptione){e.printStackTrace();}3.3 單雙精類型原數據就是一個小數
try{PHPSerializerps=newPHPSerializer();Doubles;s=(Double)ps.unserialize(newString("d:518168.99;").getBytes(),Double.class);returns;}catch(Exceptione){e.printStackTrace();}3.4 NULL類型原數據就是一個null,由于沒有類型,反序列化會失敗
try{PHPSerializerps=newPHPSerializer();Strings;s=(String)ps.unserialize(newString("N;").getBytes(),String.class);returns;}catch(Exceptione){e.printStackTrace();}3.5 實體對象類型如果原數據是一個對象(就是數組的下標為字符串的情況),那么就可以建立同樣結構的實體對象,使用這個實體對象可以直接接收數組數據
注意:實體對象必須是public的
3.5.1 實體對象
@DatapublicclassMyUser{Integerid;Stringname;Stringnote;}3.5.2 反序列化try{PHPSerializerps=newPHPSerializer();MyUsers;s=(MyUser)ps.unserialize(newString("a:3:{s:2:"id";i:35;s:4:"name";s:15:"鬼谷子叔叔";s:4:"note";s:1:"s";}").getBytes(),MyUser.class);returns;}catch(Exceptione){e.printStackTrace();}如果原數據是一個數組(就是數組下標為數字的情況)的話,那么可以使用AssocArray類型將結果集先收集起來,然后再使用Cast對象將數據轉換成Java對應的類型
注意:實體對象必須是public的
3.6.1 實體對象
@DatapublicclassMyTag{Integerid;Stringtag;}3.6.2 反序列化try{PHPSerializerps=newPHPSerializer();List<MyTag>s=newArrayList<>();AssocArrayaa;aa=(AssocArray)ps.unserialize(newString("a:3:{i:0;a:2:{s:2:"id";i:15;s:3:"tag";s:5:"C/C++";}i:1;a:2:{s:2:"id";i:16;s:3:"tag";s:4:"Java";}i:2;a:2:{s:2:"id";i:18;s:3:"tag";s:3:"PHP";}}").getBytes());for(inti=0;i<aa.size();i++){s.add((MyTag)Cast.cast(aa.get(i),MyTag.class));}returns;}catch(Exceptione){e.printStackTrace();}可以看到PHPSerializer基本可以滿足我們在Java反序列化使用PHP語言序列化的數據結構的需要了 。
- 臺式機鍵盤沒有反應燈不亮 臺式機鍵盤沒有反應怎么辦
- 筆記本電腦鍵盤鼠標沒反應怎么辦 筆記本電腦鍵盤鼠標沒反應是怎么回事
- ducky機械鍵盤官網 ducky鍵盤沒反應
- php時間代碼分秒 php時間函數代碼
- 教你分辨汽車輪胎正反面 裝反危險多多萬萬注意
- 電腦反間諜軟件 間諜軟件是什么
- 情侶檢討書500字反省本身 給女伴侶寫認錯檢討書撩妹套路
- 中國的反重力技術有何突破 中國的反重力技術
- 喜歡一個人的正常生理反應 男人見到喜歡的人反應
- 胡桃殼的鞋子和手套 胡桃殼的鞋子和手套 反思
