Httpresponse превышает размер буфера в Tizen


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

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

1 ответ:

Используйте следующий код для ссылки, в tizen мы получаем ответ в виде кусков данных, как вы сказали, 15559 байт являются ссылочными данными. Таким образом, вы должны собирать данные bytebuffer, пока не получите все данные.

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
 }
 }