AWS S3 アップロードの content Length の問題

Amazon S3 サービスのクライアント、
com.amazonaws.service.s3.AmazonS3
で、InputStream から S3 にアップロードする時、
com.amazonaws.service.s3.model.ObjectMetadata にセットする
長さ=content Length をわからない時に、どうやって調べて指定すれば、良いのかという問題
出くわしました。

仮に指定しないで、アップロード実行すると、成功はするものの、標準エラー出力で、
WARNING: No content length specified for stream data.
Stream contents will be buffered in memory and could result in out of memory errors

が出てしまいます。
StackOverFlow に、こんなのがありますが。。
amazon web services - How to set InputStream content Length - Stack Overflow
でも、メモリ不足エラーを引き起こしかねません。

やっぱり一時的にどこかに File を作って書き込んでサイズを求めるしかないのか、
こんな例も見かけましたが、、、

AmazonS3 s3 = new AmazonS3Client(awsCredentials);

File scratchFile = File.createTempFile("prefix", "suffix");

FileUtils.copyInputStreamToFile(inputStream, scratchFile);    
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, scratchFile);
PutObjectResult putObjectResult = s3.putObject(putObjectRequest);

File.createTempFile で作られる一時ファイルって、
Windows だと、ユーザのディレクト
C:\Users\Xxxxxxxxx\AppData\Local\Temp
こんなところに、
prefix + xxxxxxxxxxxxxxx + suffix
という書式で一時ファイルができる。
ここに、 inputStream から copy して、これを、PutObjectRequest にして送る。
ということなのだが、、、
InputStream から送る場合のサイズ指定は、正確に指定するか、まったく指定しないで運に任せるのか
ということになってしまう。

そもそも長さ不明を送るなんて、、、とも思うが、どう解決するのが良いのか。。。