記録されたデータベースから 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 データを受信していることも追加する必要があります。使用するように与えられた新しいリプレイ構成をドロップした後、このエラーを受け取り始めました。おそらく問題は、どのリプレイ構成設定がこのようなことに影響を与える可能性があるかということです。リクエストに応じて、難読化された @key フィールドを IDL に投稿しています
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
...
}