c++ - Httpresponse 超出 Tizen 中的缓冲区大小

标签 c++ httpresponse bytebuffer tizen tizen-native-app

我正在尝试解析 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/

相关文章:

c++ - 我应该在构造函数初始化列表中使用列表初始化吗?

java - 如何获取 HttpResponse 文本

java - 如何存储可能包含二进制数据的 Http Response?

java - 检测 Bytebuffer 是否包含 int 或仅包含 byte[]

java - 将 ByteBuffer 的内容写入 DataOutput?

c++ - 头文件 c++ windows 到 linux 的转换

c++ - int 测试(无符号整数 i = -1);为什么编译器不生成警告?

c++ - 如何查看应用程序运行的系统是否有所需的Windows API函数?

android - 为什么我得到 Android : The target server failed to respond?

java - ByteBuffer putLong() 用于 long 的 7 字节值