我正在从记录的数据库中播放 DDS 数据,并编写了一个 Java 程序来监听数据。我能够很好地接收大部分消息,但我收到了一些一致的异常,如下所示:
PRESCstReaderCollator_storeSampleData:!deserialize
java.lang.IllegalStateException: not enough available space in CDR buffer
at com.rti.dds.cdr.CdrBuffer.checkSize(Unknown Source)
at com.rti.dds.cdr.CdrInputStream.readShortFromBigEndian(Unknown Source)
at com.rti.dds.cdr.CdrInputStream.deserializeAndSetCdrEncapsulation(Unknown Source)
at <my type>.deserialize_key_sample(<my type>TypeSupport.java:456)
at com.rti.dds.topic.TypeSupportImpl.deserialize_key(Unknown Source)
at com.rti.dds.topic.TypeSupportImpl.deserialize_keyI(Unknown Source)
有没有人看到这个或知道什么可能导致这个?
编辑:我还应该补充一点,我目前正在使用 rtireplay 通过重放数据库接收 DDS 数据。在放入我被赋予使用的新重播配置后,我开始收到此错误。所以也许问题是什么重播配置设置会影响这样的事情?我还应要求在 IDL 中发布了混淆的 @key 字段
struct MyType{
Key1 key1; //@key
Key2 key2; //@key
...
}
struct Key1 {
long long m; //@key
long long l; //@key
...
}
//key members only
struct Key2 {
Key1 a; //@key
...
}