gpt4 book ai didi

data-distribution-service - 在开放拼接 DDS 中发布文件

转载 作者:行者123 更新时间:2023-12-04 05:39:33 25 4
gpt4 key购买 nike

我已经成功创建了具有原始类型的发布者和订阅者。现在我在尝试将文件(如 xml、txt、视频、音频等)发布到 DDS 时遇到问题。我不知道如何指定 IDL 文件中的类型以及如何将整个文件发布到 DDS(以及如何在订阅者端接收文件)。

还有一个问题:“在 DDS 中发布是否有任何内存限制?”

最佳答案

您可以通过多种途径使用 DDS 分发文件。最直接(但不一定是最好的)是使用八位字节(字节)序列来捕获文件的内容。这可以通过像这样的 IDL 定义来实现:

const long MAX_NAME_LEN = 128;
const long MAX_FILE_SIZE = 100000;

typedef string<MAX_NAME_LEN> NameType;
typedef sequence<octet,MAX_FILE_SIZE> BinaryContentsType;

struct BinaryFile {
NameType name; //@key
BinaryContentsType contents;
};
#pragma keylist BinaryFile name

由于您的问题并非针对 OpenSplice DDS,而是适用于任何 DDS 实现,因此我包含了用于定义关键属性的语法,以便它适用于多个实现。

在您的应用程序中,您必须实例化类型并填充成员的值。这看起来像
BinaryFile instance = new BinaryFile();
instance.name = "SomeFileName";
// fill instance.contents by reading file into array of bytes.
contents属性将是一个字节数组。内容填好后,调用 write BinaryFileDataWriter 上的方法,类似于其他示例所做的。

除了配置的共享内存的限制之外,以这种方式分发的文件的大小没有实际限制。但是,对大小施加限制是一种很好的做法,这就是 BinaryContentsType 中的序列的原因。类型是有界的。

您没有提到您使用的编程语言,因此很难提供任何编码细节。但是既然您提到您确实开始使用基本类型,那么应该很容易弄清楚如何发布 BinaryFileType类型,特别是如果您查看提供的文档和示例并将其应用于您自己的类型。

作为旁注,您确定要分发完整的文件吗?根据情况,更好的方法可能是分析文件内容的结构并创建与之匹配的数据模型。您将在发布者端读取文件并将其转换为有意义的数据项,而不是 blob。这样,订阅者可以利用更高级的数据管理功能,例如通过仅订阅可用主题的子集或使用基于内容的过滤器来订阅内容的子集。这是否有意义完全取决于您的用例。

关于data-distribution-service - 在开放拼接 DDS 中发布文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11430482/

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