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

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

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

2

Решение

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

Code description: оставить байтовый буфер как переменную класса (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
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector