2014-03-03 6 views
0

http 연결을 만들 때 약간 혼란 스럽습니다. 나는 서버의 데이터가 클라이언트에서 다운로드를 완료 한 코드의 위치를 ​​알고 싶습니까?HttpGet 및 DefaultHttpClient 라이브 사이클, 모든 단계에서 모든 데이터가 서버에서 검색됩니까?

I가 다음 코드, 표준 HTTP 자바 접속 코드 :

DefaultHttpClient client = new DefaultHttpClient(); 
     HttpGet httpGet = new HttpGet(url); 
     try { 
      HttpResponse execute = client.execute(httpGet); 
      InputStream content = execute.getEntity().getContent(); 

      BufferedReader buffer = new BufferedReader(new InputStreamReader(content)); 
      String s = ""; 
      while ((s = buffer.readLine()) != null) { 
      response += s; 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     } 

때문에 문제가 실제로에서 일어나는 것입니다 :

HttpResponse execute = client.execute(httpGet); 
InputStream content = execute.getEntity().getContent(); 

은이 곳에서 다운로드 서버 데이터의 전부 또는 서버의 데이터가 여전히 while 블록에 도착할 수 있습니다.

while ((s = buffer.readLine()) != null) { 
    response += s; 
} 

내 이해는 그 연결이 아직 살아 있다는 것입니다 :

while ((s = buffer.readLine()) != null) { 
    response += s; 
} 

및 더 많은 데이터가 소켓을 읽는 동안 올 수 있습니다. 내가 영화를 좋아해서 큰 길이나 그림을 그리는 등의 입찰 데이터를 처리하기 위해 스트림을 사용하고 있기 때문에이 사실을 알고 있습니다.

HttpResponse execute = client.execute(httpGet); 

응답이 시점 이후에 메모리에 : .execute() 호출되면

답변

0

요청은 즉 후에 실행된다. 예, 연결은 여전히 ​​살아 있지만 연결 관리자가 연결을 종료 할 때까지 아무런 요청도하지 않습니다.

while 회 돌이에서 응답은 연결 관련 조작이없는 문자열로 변환됩니다.