[英]Consuming chunk encoded data using Apache HTTPComponents
HTTP客戶端中是否有一個幫助程序方法,當一個塊到達網絡時,該方法可讓您使用塊編碼的數據? 也許我忽略了這一點,但找不到與該主題相關的任何內容。 我確實在Java中看到了此Chunked HTTP解碼嗎? 但是ChunkedInputStream在HTTP Client 4.x中不再可用
這就是通過電線來的東西。
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並手動執行此操作? 手動獲取塊大小,然后根據塊大小讀取緩沖區。
這不是理想的解決方案,因為我希望利用HttpComponents幫助程序(如果有的話)來解析大塊編碼的數據,但是我使用Jackson的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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.