org.apache.httpcomponents バージョン 4.23 の httpclient を使用して、scala で http リクエストを実行しようとしています。特に、メモリ内の大きな (~100Mb) バイト配列をコピーしないようにするために、InputStreamEntity を使用して要求を作成するプットを実行したいと考えています。スニペットは次のとおりです。
val req = new HttpPut(url)
req setEntity new InputStreamEntity(contentStream, -1/*contentlength*/)
val client = new DefaultHttpClient(connManager, httpParams)
val resp = client execute req
コード url では、connManager、httpParams が別の場所で定義されています。コードの結果は、目的の場所にコンテンツのないファイルが作成されます。3 バイトの contentStream でテストしています。コンテンツの長さを引数として明示的に 3 に設定して InputStreamEntity を作成すると、コードは正しい方法でファイルを作成します。本番環境では正当な理由から、ストリームの長さがわからないため、負の数を使用して、InputStreamEntity の API によって通知されるように、ストリームの最後に到達するまでストリーム全体が送信されるようにします。私は何を間違っていますか?コンテンツの長さを明示的に設定しないと、空のファイルが表示されるのはなぜですか?