2013-11-14 2 views
2

Я пытаюсь проанализировать XML-данные, содержащиеся в объекте ByteBuffer, который получается с использованием кода, подобного следующему ReadBodyN(). Если Httprequest присваивается небольшой XML-странице, ReadBodyN() и синтаксический анализ работают отлично. Но для большой страницы XML, содержащей более 50 тыс. Символов после выполнения ReadBodyN(), в объекте ByteBuffer доступно только 15559 символов. Как я могу получить весь XML в байтовом буфере?Httpresponse превышает размер буфера в Tizen

HttpResponse* pResponse = httpTransaction.GetResponse(); 
if (pResponse->GetHttpStatusCode() == HTTP_STATUS_OK) 
{ 
    ByteBuffer* pBody = null; 
    pBody = pResponse->ReadBodyN(); 
} 

ответ

2

Используйте следующий код для справки, в Tizen мы получаем ответ в виде блоков данных, Как вы сказали, 15559 байт является ссылкой на данные. Поэтому вы должны собирать данные байтового буфера, пока не получите все данные.

Code description: держать ByteBuffer в качестве переменной класса (here _pBuff)

_hasData это флаг, который устанавливается после того, как буфер содержит данные (Затем необходимо добавить данные)

После того, как вы получите все данные очистить _pbuff

void YourClass::OnTransactionReadyToRead(HttpSession& httpSession, 
     HttpTransaction& httpTransaction, int availableBodyLen) { 

AppLog("Transaction Ready to Read : availableBodyLen %d", availableBodyLen); 

try { 
     HttpResponse* pHttpResponse = null; 
     HttpHeader* pHttpHeader = null; 

     pHttpResponse = httpTransaction.GetResponse(); 

     if (pHttpResponse->GetHttpStatusCode() == HTTP_STATUS_OK) { 

      bool _hasData = false; 

      if (!_pBuff) { 
       _pBuff = new ByteBuffer; 
       _pBuff->Construct(availableBodyLen); 
      } 
      else 
      { 
       _pBuff->ExpandCapacity(_pBuff->GetCapacity() + availableBodyLen); 
       _hasData = true; 
      } 

      pHttpHeader = pHttpResponse->GetHeader(); 

      if(_hasData) 
      { 
       ByteBuffer* pBody = pHttpResponse->ReadBodyN(); 

       // add to local store 
       byte* pByte = new byte[availableBodyLen]; 
       pBody->GetArray(pByte,0,availableBodyLen); 
       _pBuff->SetPosition(_pBuff->GetCapacity() - availableBodyLen); 
       _pBuff->SetArray(pByte,0,availableBodyLen); 
       delete []pByte; 
       delete pBody; 
      } 
      else 
       _pBuff = pHttpResponse->ReadBodyN(); 

    // Your Call || code 
} 
} 
+0

Его работа ... Спасибо. –

+0

добро пожаловать ..... :) –