java 与 c++ 的socket通信过程中,如何将c++发送的结构体直接转成java bean类

发布于 2022-08-23 13:54:38 字数 331 浏览 28 评论 5

我相信这个问题以前在csdn上也有人问过.
c++ 结构体

struct Info { 
    int id;
    char name[20];
};

java Bean类

class Info {
    private int id;
    private String name;
    //Getter Setter
}

一个简单的想法就是
java 客户端 读取发送过来的字节数据 然后针对性的做大小字节变化,并取出多少字节复制给id或name
我主要想询问下有没有一种比较好直接能够read/Write Object的解决方案

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

那小子欠揍 2022-08-27 13:03:49

05年我用过一个包javolution,就实现了把c语言定义的结构体直接转为java的对象的。
http://javolution.org/
楼主可以试试。
另外楼上说的protobuf这些,需要c和java同时修改代码支持才行,不能满足楼主直接通讯的需求吧

聊慰 2022-08-27 12:11:16

纯粹struct的话,两边统一下字节对齐和字节序,使用二进制协议也可以.
你可以把要传输的这段内容看成是一个很长的字符串。

当然,java在解释二进制的结构体的时候,你是不能直接像c/c++一样, (struct xxx*)buff就完成转换,可能需要你深刻理解c++的内存layout,这相对复杂了。

实际上,通用的做法是实用一个第三方的标准编码,和语言无关的,比如google开源的 protocbuffer,以及平常我们用的json,xml都是可以的。

つ可否回来 2022-08-27 04:37:42

使用google protocol buffer 定义消息,支持C++,Java,Python,还有很多其他语言的第三方插件。例如C#,Object-C,Flex,PHP等都支持。
如果是自己写编解码,在Java中要特别注意处理无符号数(或者干脆避免使用unsigned int,直接使用int),还有字符也不一样,java的字符是unicode编码,而C、C++是ascii编码。。

蒗幽 2022-08-26 22:15:32

针对跨语言通讯。貌似有些RPC框架,如ICE,THRIFT。

若沐 2022-08-26 06:01:08

这个玩意貌似叫protoBuffer,比较好的办法是,你得有一个第三方的描述性文件,描述这个结构,比如

<info type="info">
    <id  type="int32" />
    <name type="string" />
</info>

通信的两端必须得理解这个结构的,然后在传输的时候,序列化一下,在按照一定的规则读一下就OK。你可以看看google关于此方面的资料,你搜那个protoBuffer就是了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文