2012-12-13 67 views
4

我有兩個應用程序(一個用C++編寫,另一個用Java編寫)。我使用msgpack將C++類打包爲二進制格式。然後我將它發送給Java端。我想知道是否我用java解壓縮了這個消息(也使用msgpack)我是否得到正確的Java類對象?msgpack:C++和java之間的消息傳遞

請看下面的例子:

// C++ 
class Foo 
{ 
public: 
    // some methods here... 
    void Pack(uint8_t *data, size_t size); 
private: 
    std::string m1_; 
    std::string m2_; 
    int m3_; 
public: 
    MSGPACK_DEFINE(m1_, m2_, m3_); 
} 

void Foo::Pack(uint8_t *data, size_t size) 
{ 
    msgpack::sbuffer sbuf; 
    msgpack::pack(sbuf, *this); 

    data = sbuf.data(); 
    size = sbuf.size(); 
} 

和Java方面:

// Java 

public class Foo 
{ 

    public void Unpack(byte[] raw, Foo obj) 
    { 
     MessagePack msgpack = new MessagePack(); 
     try 
     { 
      obj = msgpack.read(raw, Foo.class); 
      // Does obj's m1_, m2_ and m3_ contains proper values from C++ class Foo? 
     } 
     catch(IOException ex) 
     { 
      // ... 
     } 
    } 

    // ... 

    private String m1_; 
    private String m2_; 
    private int m3_; 
} 

我不想一個收拾的Foo的成員之一,因爲我有很多他們。

在此先感謝。

回答

0

,因爲它是msgpack網站上說

MessagePack是一種高效的二進制序列化格式。它允許您在多種語言(如JSON)之間交換數據。

因此,答案是「是的,你的java對象應適當反序列化」

+1

@PetterFriberg我想你是對的,我錯了這一個,本來應該更密切地關注 –

+0

@VasilyAlexeev沒有問題,如果你懷疑你總是可以通過[SOCVR室](http://chat.stackoverflow.com/rooms/41570/so-close-vote-reviewers) –