2016-11-25 120 views
1

我將java對象存儲在hbase中(比如)假設我有一個具有3個參數(如名,中間名和姓氏)的對象'User'。我用下面的代碼序列中的java有沒有一種方法來通過python反序列化java對象

Object object = (object) user;  
byte[] byteData = SerializationUtils.serialize((Serializable) object); 

並存儲在HBase的像「存儲完整的對象(在字節[]的上述格式)在鍵值對值部分」

它存儲在像(實施例)的HBase

柱=容器:容器,時間戳= 1480016194005,值= \ XAC \ XED \ X00 \ x05sr \ X00 & com.test.container \ X07 \ X89 \ X83 \ XFA \ 0x7F部分\ xD0F \ xA5 \ X02 \ X00 \ x08I \ X00 \ x07classIdJ \ X00 \ x14dateTimeInLongFormatZ \ X00 \ x04rootZ \ X00 \ x09undefinedL \ X00 \ x03keyt \ X00 \ x12Ljava /郎/字符串爲:L \ X00 \ x04modeq \ X00〜\ X00 \ x01L \ X00 \ x04nameq \ X00〜\ X00 \ x01L \ X00 \ x06userIdq \ X00〜\ X00 \ x01xp \ X00 \ X00 \ X00 \ X02 \ X00 \ X00 \ x01X \ x967 \ XBA \ XF0 \ X00 \ x00t \ X00 \ x1Econtainer_393_5639181044834024t \ X00 \ x06expandt \ X00 \ x02ert \ X00 \ x08testadmin

當我嘗試檢索數據,我用Java中的反序列化之後和轉換回可讀格式

對象= SerializationUtils.deserialize(字節)的對象;

I would like to retrieve the data stored in java format via happybase using python and I achieved it and received the data as available in hbase like 

它存儲在HBase的像(實施例)

柱=容器:容器,時間戳= 1480016194005,值= \ XAC \ XED \ X00 \ x05sr \ X00 & com.test.container \ X07 \ X89 \ X83 \ XFA \ 0x7F部分\ xD0F \ xA5 \ X02 \ X00 \ x08I \ X00 \ x07classIdJ \ X00 \ x14dateTimeInLongFormatZ \ X00 \ x04rootZ \ X00 \ x09undefinedL \ X00 \ x03keyt \ X00 \ x12Ljava /郎/字符串爲:L \ X00 \ x04modeq \ X00〜\ X00 \ x01L \ X00 \ x04nameq \ X00〜\ X00 \ x01L \ X00 \ x06userIdq \ X00〜\ X00 \ x01xp \ X00 \ X00 \ X00 \ X02 \ X00 \ X00 \ x01X \ x967 \ XBA \ xF0 \ x00 \ x00t \ x00 \ x1Econtainer_393_5639181044834024t \ x00 \ x06expandt \ x00 \ x02ert \ x00 \ x08testadmin

有沒有辦法通過Python反序列化的Java對象

感謝很多

哈日

+0

簡答:如果你問這個問題不是。較長的答案:Java二進制序列化格式[詳細說明](https://docs.oracle.com/javase/8/docs/platform/serialization/spec/protocol.html),所以你可以用Python編寫代碼,或者任何語言,讀取數據。但是你顯然不能在Python代碼中創建和Java代碼相同的_behaviour_,所以雖然你可以從序列化格式讀取**數據**,但是你不能讀**行爲**。 –

回答

2

有一個Python庫爲:

https://pypi.python.org/pypi/javaobj-py3/

用法似乎有很簡單:

import javaobj 
jobj = self.read_file("obj5.ser") 
pobj = javaobj.loads(jobj) 
print(pobj) 
+0

通過使用'pyobj = javaobj.loads(data)'我將'b「''轉換爲對象,但有時出現錯誤'RuntimeError:流在解組時意外結束。你知道有什麼理由嗎? – Amogh