【问题标题】:Consuming chunk encoded data using Apache HTTPComponents使用 Apache HTTPComponents 使用块编码数据
【发布时间】:2013-10-09 18:32:27
【问题描述】:

HTTP 客户端中是否有一个帮助方法,允许您在一个块到达网络时使用块编码数据?也许我忽略了这一点,但我找不到与该主题相关的任何内容。我确实看到了这个Chunked http decoding in java?,但是 HTTP Client 4.x 中不再提供 ChunkedInputStream

以下是通过电线传入的内容。

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 并手动执行此操作?手动获取块大小,然后根据块大小读取缓冲区。

【问题讨论】:

    标签: java encoding chunked-encoding apache-httpcomponents


    【解决方案1】:

    不是理想的解决方案,因为我希望使用 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();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      相关资源
      最近更新 更多