web-dev-qa-db-ja.com

Java InputStreamサイズ

Fileインスタンスを作成せずに、InputStreamのサイズをバイト単位で取得する必要があります。 Java NIOを使用してそれを行う方法はありますか?

6
user1566669

一般的なInputStream?ストリームの最後に到達するまで、読み取ったバイト数を数えながら、読み取りと読み取りを続ける必要があります(たとえば、同じバッファーに何度も何度も)。

もちろん、その場合、データ自体を読み取ることはできなくなります...それを実行したい場合は、データを読み取るときにデータを保持する必要があります。 ByteArrayOutputStreamにコピーします。

(長さの計算と同時にデータを処理できる場合は、それを実行してください-ループを使用してデータを読み取り、毎回同じバッファーに読み取り、カウンターをインクリメントして、どれだけの量を記録するかを記録します。読んだことがあります。ストリームで何をしたいのかについての情報は実際には提供されていません。)

25
Jon Skeet

それは原則的にはわかりません(書き込みを停止しないピアを検討してください)、そしてあなたはそれを必要としません。固定サイズのバッファを使用して、ループで読み取りと書き込みを行うだけです。 NIOは魔法の解決策を提供していません。

6
user207421

追加のオプションがいくつかあります。

入力ストリームのblockingの性質に応じて、ストリームで available() を呼び出すことができます。

ストリームが小さい場合は、それらを PushbackInputStream sに書き込み、バイトをカウントしてから巻き戻すことができます。

1
Nicholas