2013-11-14 3 views
2

다음 ReadBodyN()과 비슷한 코드를 사용하여 가져온 ByteBuffer 개체에 포함 된 XML 데이터를 구문 분석하려고합니다. 작은 XML 페이지에 Httprequest가 주어지면 ReadBodyN() 및 구문 분석이 정상적으로 작동합니다. 그러나 ReadBodyN()을 실행 한 후 50,000 개 이상의 문자가 포함 된 큰 XML 페이지의 경우 ByteBuffer 객체에서 15559 개의 문자 만 사용할 수 있습니다. 전체 XML을 bytebuffer로 가져 오려면 어떻게해야합니까?Httpresponse가 Tizen의 버퍼 크기를 초과합니다.

답변

2

다음 코드를 참조하십시오. 15559 바이트가 참조 데이터라고 말했듯이, 우리는 응답을 데이터 청크로받습니다. 따라서 전체 데이터를 얻을 때까지 바이트 버퍼 데이터를 수집해야합니다.

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

... 감사합니다. –

+0

환영합니다 ..... :) –

관련 문제