2011-08-24 53 views
3

我有一個有一個序列化的一些對象和整數與功能的文件中像反序列化在C#中的Java序列文件

ObjectOutputStream oos = new ObjectOutputStream(fos); 
oos.writeInt(RANK_SIZE); 
oos.writeObject(_firstArray); 
oos.writeObject(_level[3]); 
oos.writeObject(_level[4]); 
... 

現在我有麻煩了反序列化文件與C#中的Java項目(試過BinaryFormatter)因爲它顯然只能將整個文件反序列化爲單個對象(或數組,但我有不同長度的對象)。

我首先嚐試將這些文件的生成移植到C#,但失敗慘敗。這些文件很小,我不需要必須自己生成它們。

我是否需要改變這些文件在Java中生成的方式,或者我可以以任何方式反序列化它?

+0

我不確定java與.NET有相同的二進制格式化程序。爲什麼不用xml來代替?無論如何,好的問題。我想聽聽人們的說法 –

+3

您需要一個跨平臺的序列化格式;我傾向於protobuf,但xml,json,heck:CSV!任何與平臺無關的東西 –

回答

10

在標準.NET框架中沒有任何知道如何反序列化Java對象的東西。理論上,您可以使用Java序列化規範並在C#中編寫您自己的反序列化代碼。但這將是一個龐大而複雜的項目,我不認爲你會發現很多客戶對使用它感興趣。

遠遠更容易的是改變序列化數據以使用便攜式格式的方式:JSON或某種形式的XML。有Java和C#庫來處理這種格式,總的工作量會少幾個數量級。我會非常喜歡第二種方法。

+1

C#是一種語言。你的意思是在框架中沒有預先分發的包可以做到。 ikvm可以在C#中做到這一點 –

+0

夠公平的,編輯。 –

+0

謝謝,我在java和c#中創建了一個獨立的類,用Json將其序列化,並且沒有任何反序列化問題。 – Sven

5

也許一見鍾情的違反直覺的解決方案可能是將它們序列化爲一些通用可理解的格式,如JSON?我甚至不確定Java中的序列化對象的二進制格式是否保證在Java版本之間保持不變....

Jackson是我個人最喜歡的Java JSON庫。

3

http://www.ikvm.net/ IKVM可以完美地完成它。

+0

學習這個項目感到驚訝仍然活着。所以它有效? –

+0

@Ernest弗裏德曼希爾我也是,但是它的工作原理。他們有測試顯示使用IKVM運行Eclipse和JBoss。 –