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 ответ:
Используйте следующий код для ссылки, в 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 } }