TAO中序列化一个对象

每种RPC方式都必须提供一种序列化机制,以把参数列表中的参数转化成字节流通过传输层发送给对方。如sun rpc使用的是xdr,web service使用soap格式的xml。而对于CORBA,标准中并没有对之做细致的规定,只是在iiop中做了一些简略的规范。
下面一段示例代码序列化一个Any对象。(这里所说的序列化与POA中的持久化还是有些区别的。)

  TAO_OutputCDR cdr; 
  cdr << data; 
  CORBA::ULong size (ACE_Utils::truncate_cast<CORBA::ULong> (cdr.total_length ())); 

  CORBA::OctetSeq  seq (size); 
  seq.length (size); 

  char* buffer = reinterpret_cast<char*> (seq.get_buffer ()); 

  { 
    char* buf = buffer; 

    for (ACE_Message_Block const* mb = cdr.begin (); 
         mb != 0; 
         mb = mb->cont ()) 
      { 
        ACE_OS::memcpy (buf, mb->rd_ptr (), mb->length ()); 
        buf += mb->length (); 
      } 
  }

之后就可以以这样的方式把这个对象发送给对方

 socket_.send (buffer, size);

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥