2013-10-09 15 views
0

HTTP客戶端中是否存在幫助器方法,允許您在一個塊到達線路時使用塊編碼數據?也許我忽略了這一點,但我找不到與此主題相關的任何內容。我確實看到這個Chunked http decoding in java?,但ChunkedInputStream不再可用於HTTP客戶端4.x使用Apache HTTPComponents消費塊編碼的數據

以下是通過網絡進入的內容。

HttpResponseHandlerImpl.setContentType(): application/json 
HttpResponseHandlerImpl.setContentLength(): -1 
58495 [main] DEBUG org.apache.http.wire - << "24[\r][\n]" 
58495 [main] DEBUG org.apache.http.wire - << "{"firstName":"David","lastName":"0"}" 
58495 [main] DEBUG org.apache.http.wire - << "[\r][\n]" 
58495 [main] DEBUG org.apache.http.wire - << "24[\r][\n]" 
58495 [main] DEBUG org.apache.http.wire - << "{"firstName":"David","lastName":"1"}" 
58495 [main] DEBUG org.apache.http.wire - << "[\r][\n]" 
58495 [main] DEBUG org.apache.http.wire - << "24[\r][\n]" 
58495 [main] DEBUG org.apache.http.wire - << "{"firstName":"David","lastName":"2"}" 
58501 [main] DEBUG org.apache.http.wire - << "[\r][\n]" 
58501 [main] DEBUG org.apache.http.wire - << "0[\r][\n]" 
58501 [main] DEBUG org.apache.http.wire - << "[\r][\n]" 

我想要做的是一次處理一個塊。有沒有幫助你的方法?或者我只需要獲取InputStream並手動執行此操作?手動獲取塊大小,然後根據塊大小讀取緩衝區。

回答

0

不是理想的解決方案,因爲我希望利用HttpComponents助手,如果有的話解析塊編碼的數據,但我得到了這個工作使用傑克遜的JsonParser http://jackson.codehaus.org/,我知道從我的Web服務返回的響應總是JSON對象。

下面的代碼

try { 

     MappingJsonFactory jsonFactory = new MappingJsonFactory(); 

     JsonParser jsonParser = jsonFactory.createParser(inputStream); 

     JsonToken token = null; 

     token = jsonParser.nextToken(); 

     StringBuffer buffer = new StringBuffer(); 

     do { 

      if (token == JsonToken.START_OBJECT) { 
       buffer.append("{"); 
      } else if (token == JsonToken.END_OBJECT) { 
       buffer.append("}"); 
       System.out.println("Received chunk: " + buffer.toString()); 
       buffer.setLength(0); 
      } else if (token == JsonToken.FIELD_NAME) { 
       jsonParser.nextToken(); 
       buffer.append("\"" + jsonParser.getCurrentName() + "\":"); 
       buffer.append("\"" + jsonParser.getText() + "\":"); 
      } else if (token == JsonToken.VALUE_STRING) { 
       buffer.append("\"" + jsonParser.getCurrentName() + "\":"); 
       buffer.append("\"" + jsonParser.getText() + "\":"); 
      } 

      token = jsonParser.nextToken(); 

     } while (token != null); 

    } catch (Throwable th) { 
     th.printStackTrace(); 
    }