1

一部のコードを Http Client 3.x ライブラリから Http Components 4.x ライブラリに変換しています。古いコードには、応答が特定のサイズを超えていないことを確認するためのチェックが含まれています。getResponseBodyAsStream() メソッドを使用して応答からストリームを取得し、サイズを超えた時期を判断できるため、これは Http Client 3.x ではかなり簡単に実行できます。Http Components で同様の方法が見つかりません。

私がやろうとしていることの例としての古いコードは次のとおりです。

private static final long RESPONSE_SIZE_LIMIT = 1024 * 1024 * 10;
private static final int READ_BUFFER_SIZE = 16384;

private static ByteArrayOutputStream readResponseBody(HttpMethodBase method)
        throws IOException {

    int len;
    byte buff[] = new byte[READ_BUFFER_SIZE];
    ByteArrayOutputStream out = null;
    InputStream in = null;
    long byteCount = 0;

    in = method.getResponseBodyAsStream();

    out = new ByteArrayOutputStream(READ_BUFFER_SIZE);

    while ((len = in.read(buff)) != -1 && byteCount <= RESPONSE_SIZE_LIMIT) {
        byteCount += len;
        out.write(buff, 0, len);
    }

    if (byteCount >= RESPONSE_SIZE_LIMIT) {
        throw new IOException(
                "Size limited exceeded reading from HTTP input stream");
    }

    return (out);

}
4

1 に答える 1

2

HttpEntity.getContent()を使用して、自分から読み取るInputStreamを取得できます。

于 2012-09-19T20:30:54.617 に答える