我有一个常见的套接字编程问题要问你。
我有一个名为 Data 的 C 结构体:
struct data {
double speed;
double length;
char carName[32];
struct Attribs;
}
struct Attribs {
int color;
}
我希望能够在 Java 中创建类似的结构,创建套接字,使用上述结构创建数据包,并将其发送到 C++ 套接字侦听器。
关于序列化数据(基本上是数据包中传输的 1 和 0),您能告诉我什么吗? C++ 如何“读取”这些数据包并重新创建结构?像这样的结构如何存储在数据包中?
一般来说,你可以告诉我任何事情,让我知道如何解决这样的问题。
Thanks!
- 如果您使用二进制序列化,请注意字节顺序。 Sun 的 JVM 是 Big Endian,如果您使用的是 Intel x86,那么您使用的是 Little Endian 机器。
- 我会使用Java的字节缓冲区用于快速本机序列化。 ByteBuffer 是 NIO 库的一部分,因此据说比旧的 DataInput/OutputStreams 具有更高的性能。
- 尤其要厌倦序列化浮动!如上所述,通过线路将所有数据传输为字符串更安全。
- 在 C++ 方面,无论网络如何,在某个时刻您都会有一个已填满的数据缓冲区。因此,您的反序列化代码将类似于:
size_t amount_read = 0;
data my_data;
memcpy(buffer+amount_read, &my_data.speed, sizeof(my_data.speed))
amount_read += sizeof(my_data.speed)
memcpy(buffer+amount_read, &my_data.length, sizeof(my_data.length))
amount_read += sizeof(my_data.length)
- 请注意,基本 C++ 类型的大小是实现定义的,因此 Java 和 C++ 中的基本类型不能直接转换。
- 你可以使用谷歌协议缓冲区。如果处理各种数据结构,我的首选解决方案。
- 您也可以使用 JSON 进行序列化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)