4

私は 2 つのアプリケーションを持っています (1 つは C++ で作成され、もう 1 つは Java で作成されています)。msgpackC++ クラスをバイナリ形式にパックするために使用します。次に、これを Java 側に送信します。このメッセージを Java でアンパックして (msgpackあまりにも使用して)、正しい 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 のメンバーがたくさんあるので、1 つずつパックしたくありません。

前もって感謝します。

4

1 に答える 1

0

msgpack Webサイトで言われているように

MessagePack は、効率的なバイナリ シリアル化形式です。JSON などの複数の言語間でデータを交換できます。

したがって、答えは「はい、Java オブジェクトを適切にデシリアライズする必要があります」です。

于 2016-08-18T14:26:52.490 に答える