java - msgpack:C++ 和 java 之间的消息传递

标签 java c++ msgpack

我有两个应用程序(一个用 C++ 编写,另一个用 Java 编写)。我使用 msgpack 将 C++ 类打包为二进制格式。然后我将其发送到 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 的成员一个一个打包,因为我有很多。

提前致谢。

最佳答案

正如msgpack网站上所说

MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON.

所以答案是“是的,你的 java 对象应该被正确反序列化”

关于java - msgpack:C++ 和 java 之间的消息传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13856450/

相关文章:

c++ - 使用 REST (Firebase) 时的离线功能

python - msgpack: haskell 和 python

java - 计算 StdIn 中的行数和字符数

c++ - 如何在 VC++ 2005 中使用 OpenProcessToken、AdjustTokenPrivileges 和 GetExitCodeProcess

java - 尝试从数据库获取对象列表时获取重复的最后一个表单数据的列表

c++ - 包含 boost binary_oarchive.hpp 时遇到问题

Python - 读取msgpack文件并将其存储到数据框中

c - 如何解压 msgpack 文件?

java - 如何用双引号 "作为分隔符拆分字符串?

java - java中的访问器