2016-09-21 120 views
0

我有一個非常具體的要求。 我有一個Java應用程序,我必須將字節數組轉換爲具有像int,String這樣的java類型的消息。消息的結構在C++中定義如下 -轉換字節數組爲java類型

struct SMSMessage{ 
int id;   
std::string name;  
std::string source;  

std::string destination; 
std::string timestamp; 
int   type;  
int   status;  
std::string message;  
int   mesg_type; 
int   mesg_sub_type; }; 

我在我的java應用程序中收到的是字節數組。 我不知道是否C++應用程序正在使用proto緩衝區或任何其他方式轉換爲字節數組。 但是,如果我用字節逐字節解析數組,我可以得到這些值。 例如 -

ByteBuffer.wrap(Arrays.copyOfRange(byteArray, 0, 4)).getInt(); 
//byteArray -- reference to the incoming byte array 
// 0, 4-- range of bytes for integer type 

這條線將返回值正確的ID(在結構第一個屬性是INT)。

我的問題是 - 如果我寫這個結構的原型,我可以解析這個消息到Java嗎?

是否有任何其他的方式來將字節數組轉換爲Java類型?(沒有使用像谷歌的protobuf庫)

+0

我忘了提,解決方案必須與java 5和java 8 – Gunwant

+0

這聽起來像這個字節數組可能不是一個協議緩衝區。如果它被編碼爲協議緩衝區,那麼讀取前四個字節將不會直接爲您提供第一個整數字段,除非出現不可能的巧合。 –

回答

1

我'不知道你是否可以將其直接轉換爲Java結構,但我想它是不太容易。此外,如果它有效,您不能確定數據類型的大小是否相同。如果您在具有不同體系結構的其他計算機上運行C++應用程序和Java應用程序,則它可以具有不同的大小。

所以我認爲最好的選擇是你先寫入一個json或xml文件並從另一個應用程序讀回它。

如果你想像你已經寫的那樣做,那麼也許你應該按類型對C++結構進行排序。所以你可以更好地使用循環。就像我有5個4字節的整數和5個X字節的字符串。

MFG

+0

嗯,我不能使用Json或任何其他格式,因爲我無法控制C++應用程序。使用google-protobuf不可能嗎? – Gunwant

+0

使用Byte by Byte方法。謝謝 – Gunwant

0

您可以使用開源javolution藏書專門看一看的Struct類,它提供了直接映射C的結構到Java類型的一些支持。

您將遇到映射std :: string類型的問題,因爲事先不知道字符串的長度。您需要將它作爲字節流讀取,直到找到表示字符串結尾的空終止符。

相關問題