2011-11-22 90 views
1

是否有可能在python中解碼java對象?我知道返回數據的java類的結構。數據返回時的'傳輸編碼:分塊'在python中解碼java對象

或者我是否需要獲取作爲xml/json發送的返回數據?

這是我得到的迴應的一個例子; (注意某些控制字符被粘貼移除)

-- response -- 
200 OK 
Server: Apache-Coyote/1.1 
Transfer-Encoding: chunked 
Date: Tue, 22 Nov 2011 13:24:41 GMT 
��srjava.util.ArrayListx����a�IsizexpGwXsr,com.blah.blah.data.ClientInfos����8d�LdbNametLjava/lang/String;Ldescriptionq~xptdbname1t Customername1q~tdbname2tCustomername2sq~t 

本實施例中客戶端的格式返回兩個客戶端,數據庫名稱

dbname1,customername1

dbname2,customername2

+0

塊的格式是什麼? –

+0

它返回爲java.util.ArrayListx – zio

+4

@zio:這不是一個「格式」。你是否序列化對象(例如使用'DataOutputStream')?如果是這樣,那麼在*理論*你可以*反序列化它,但它會比首先使用一個理智的數據格式更復雜。 –

回答

0

---隨着更多細節的修改而編輯---

這個HTTP響應的內容是一個串行ized Java對象。

Java序列化是一個過程,通過該過程,內存中的對象被打包到傳輸友好的字節中,以便被另一個JVM讀取。總之,你需要閱讀序列化格式。假設他們沒有添加自定義序列化器,the actual protocol is documented here

剩下的只是確保你對數據字段的Python映射做了一個明智的Java。如果你想支持「往返」數據處理,你應該在數據結構的特殊「區域」中緩存有時丟棄的「java信息」,以便可以序列化回到相同的java結構。

---原貼如下---

要麼你正在拆卸類(這是很容易做到如Java具有非常剛性的類結構和一個易於扭轉字節碼源代碼映射)或你正在處理數據。

如果它正在處理數據,那麼你並沒有真正解碼Java,而且你想要做什麼的容易程度很大程度上取決於是否能夠收集有關數據編碼的知識。既然你提到了「Transfer-Encoding:Chunked」頭文件,我猜你正在讀一個HTTP響應(帶有頭文件)。

幾乎所有的語言都有一個庫來處理HTTP響應,這是由於Web服務的流行。 Python already has a HTTP client as indicated here

+0

是的,它是一個http響應。我已經更新了原始問題,並以返回的內容爲例。 – zio