gpt4 book ai didi

java - 一般套接字问题 - 将 C++ 结构从 Java 转移到 C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:05:59 25 4
gpt4 key购买 nike

我有一个一般的套接字编程问题要问你。

我有一个名为 Data 的 C 结构:

struct data {
double speed;
double length;
char carName[32];
struct Attribs;
}

struct Attribs {
int color;
}

我希望能够在 Java 中创建类似的结构,创建套接字,使用上述结构创建数据包,并将其发送到 C++ 套接字监听器。

关于序列化数据(基本上是在数据包中传输的 1 和 0),你能告诉我什么? C++ 如何“读取”这些数据包并重新创建结构?这样的结构如何存储在数据包中?

一般来说,您可以告诉我任何关于如何解决此类问题的想法。

谢谢!

最佳答案

  • 如果您使用二进制序列化,请厌倦字节顺序。 Sun 的 JVM 是 Big Endian,如果您使用的是 Intel x86,那么您使用的是小端机器。
  • 我会使用 Java 的 ByteBuffer用于快速 native 序列化。 ByteBuffers 是 NIO 库的一部分,因此据称比旧的 DataInput/OutputStreams 具有更高的性能。
  • 尤其厌倦序列化 float !如上所述,通过网络将所有数据传输为字符串会更安全。
  • 在 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++ 中的基本类型不会直接转换。
  • 你可以使用 Google Protocol缓冲器。如果处理各种数据结构,我的首选解决方案。
  • 您也可以使用 JSON 进行序列化。

关于java - 一般套接字问题 - 将 C++ 结构从 Java 转移到 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3419322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com