我正在尝试解析 ByteBuffer 对象中包含的 XML 数据,该对象是使用类似于以下 ReadBodyN() 的代码获得的。如果将 Httprequest 提供给一个小的 XML 页面,则 ReadBodyN() 和解析工作正常。但对于包含超过 50k 字符的大型 XML 页面,执行 ReadBodyN() 后,ByteBuffer 对象中只有 15559 个字符可用。如何将整个 XML 放入字节缓冲区?
HttpResponse* pResponse = httpTransaction.GetResponse();
if (pResponse->GetHttpStatusCode() == HTTP_STATUS_OK)
{
ByteBuffer* pBody = null;
pBody = pResponse->ReadBodyN();
}
最佳答案
使用以下代码作为引用,在 tizen 中我们以数据 block 的形式获取响应,正如您所说的 15559 字节是引用数据。因此,您应该收集字节缓冲区数据,直到获得整个数据。
代码说明:
将字节缓冲区保留为类变量(此处为_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
}
}
关于c++ - Httpresponse 超出 Tizen 中的缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19983574/