ImqCache C++ 类
使用此类来保存或编组内存中的数据。

使用此类来保存或编组内存中的数据。 您可以指定固定大小的内存缓冲区,或者系统可以自动提供灵活的内存量。 此类与 ImqCache 交叉引用中列出的 MQI 调用相关。
对象属性
- 自动缓冲区
- 指示缓冲区内存是由系统自动管理 (TRUE) 还是由用户提供 (FALSE)。 它最初设置为 TRUE。
未直接设置此属性。 它通过间接方式使用 useEmptyBuffer 或 useFullBuffer 方法。
如果提供了用户存储器,那么此属性为 FALSE ,缓冲区内存无法增长,并且可能会发生缓冲区溢出错误。 缓冲区的地址和长度保持不变。
如果未提供用户存储器,那么此属性为 TRUE ,并且缓冲区内存可以递增增长以容纳任意数量的消息数据。 但是,当缓冲区增大时,缓冲区的地址可能会更改,因此使用 缓冲区指针 和 数据指针时请小心。
- 缓冲区长度
- 缓冲区中的内存字节数。 初始值为零。
- 缓冲区指针
- 缓冲区内存的地址。 初始值为空。
- 数据长度
- 数据指针之后的字节数。 这必须等于或小于 消息长度。 初始值为零。
- 数据偏移量
- 数据指针之前的字节数。 这必须等于或小于 消息长度。 初始值为零。
- 数据指针
- 要写入或从下一个缓冲区中读取的部分的地址。 初始值为空。
- 消息长度
- 缓冲区中重要数据的字节数。 初始值为零。
构造函数
- ImqCache( );
- 缺省构造函数。
- ImqCache( const & ImqCache cache );
- 复制构造函数。
对象方法 (公用)
- void 运算符 = ( const ImqCache & 高速缓存 );
- 将最多 message length 字节的数据从 cache 对象复制到该对象。 如果 自动缓冲区 为 FALSE ,那么 缓冲区长度 必须已足以容纳复制的数据。
- ImqBoolean automaticBuffer () const ;
- 返回 自动缓冲区 值。
- size_t bufferLength () const ;
- 返回 缓冲区长度。
- char * bufferPointer () const ;
- 返回 缓冲区指针。
- void clearMessage ();
- 将 消息长度 和 数据偏移量 设置为零。
- size_t dataLength () const ;
- 返回 数据长度。
- size_t dataOffset () const ;
- 返回 数据偏移量。
- ImqBoolean ( const size_t offset ); setDataOffset ( const size_ t offset );
- 设置 数据偏移量。 如果需要,将增大 消息长度 ,以确保其不小于 数据偏移量。 如果成功,此方法将返回 TRUE。
- char * dataPointer () const ;
- 返回 数据指针的副本。
- size_t messageLength () const ;
- 返回 消息长度。
- ImqBoolean ( const size_t length ); setMessageLength ( const size_ t length );
- 设置 消息长度。 如果需要,请增大 缓冲区长度 ,以确保 消息长度 不大于 缓冲区长度。 必要时减小 数据偏移量 ,以确保其不大于 消息长度。 如果成功,将返回 TRUE。
- ImqBoolean moreBytes ( const size_t bytes-required );
- 确保在 数据指针 与缓冲区末尾之间提供 bytes-required 更多字节 (用于写入)。 如果成功,将返回 TRUE。
如果 自动缓冲区 为 TRUE ,那么将根据需要获取更多内存; 否则, 缓冲区长度 必须已足够。
- ImqBoolean 读 ( 连接大小 (t) 长度, char * & 外部缓冲区 );
- 将 length 字节从缓冲区从 数据指针 位置开始复制到 external-buffer。 复制数据后, 数据偏移量 将增大 length。 如果成功,此方法将返回 TRUE。
- ImqBoolean resizeBuffer ( const size_t length );
- 更改 缓冲区长度,前提是 自动缓冲区 为 TRUE。 这是通过重新分配缓冲区内存来实现的。 将现有缓冲区中最多 消息长度 字节的数据复制到新缓冲区。 复制的最大数目为 length 字节。 缓冲区指针 已更改。 消息长度 和 数据偏移量 将尽可能在新缓冲区的范围内保留。 如果成功,那么返回 TRUE ,如果 自动缓冲区 为 FALSE ,那么返回 FALSE。注: 如果系统资源存在任何问题,那么此方法可能会失败,并返回 MQRC_STORAGE_NOT_AVAILABLE。
- ImqBoolean ( const char * external-buffer, const size_t length ); useEmptyBuffer ( const char * external-buffer, const size_t length );
- 标识空的用户缓冲区,将 缓冲区指针 设置为指向 external-buffer,将 缓冲区长度 设置为 length,将 message length 设置为零。 执行 clearMessage。 如果缓冲区已完全填充数据,请改用 useFullBuffer 方法。 如果缓冲区已部分填充数据,请使用 setMessageLength 方法来指示正确的数量。 如果成功,此方法将返回 TRUE。
此方法可用于标识固定内存量,如前所述 ( external-buffer 不为空且 length 为非零) ,在此情况下, automatic buffer 设置为 FALSE ,或者可用于还原为系统管理的灵活内存 ( external-buffer 为空且 length 为零) ,在此情况下, automatic buffer 设置为 TRUE。
- ImqBoolean ( const char * externalBuffer, const size_t length ); useFullBuffer ( const char * externalBuffer, const size_t length );
- 至于使用EmptyBuffer ,只是将消息长度设置为 length。 如果成功,将返回 TRUE。
- ImqBoolean write ( const size_t length, const char * external-buffer );
- 将 length 个字节从 external-buffer复制到缓冲区中,从 数据指针 位置开始。 复制数据后, data offset 将增大 length,如果需要,将增大 message length ,以确保它不小于新的 data offset 值。 如果成功,此方法将返回 TRUE。
如果 自动缓冲区 为 TRUE ,那么保证足够的内存量; 否则,最终 数据偏移量 不得超过 缓冲区长度。
原因码
- MQRC_BUFFER_NOT_AUTOMATIC
- MQRC_DATA_截断
- MQRC_IN区内的缓冲区
- MQRC_IN有数据
- MQRC_NULL_POINTER
- MQRC_STORAGE_NOT_AVAILABLE
- MQRC_ZERO_LENGTH