簡體   English   中英

使用Apache HTTPComponents消耗塊編碼數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM