2012-12-13 65 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) –