Fileインスタンスを作成せずに、InputStreamのサイズをバイト単位で取得する必要があります。Java NIOを使用してそれを行う方法はありますか?
4 に答える
一般的なのInputStream
?ストリームの最後に到達するまで、読み取りと読み取りを続けて(たとえば、同じバッファーに何度も何度も)、読み取ったバイト数をカウントする必要があります。
もちろん、その場合、データ自体を読み取ることはできません...それを行う場合は、データを読み取るときに、たとえばにコピーするなどして、データを保持する必要がありますByteArrayOutputStream
。
(長さの計算と同時にデータを処理できる場合は、それを実行してください。ループを使用してデータを読み取り、毎回同じバッファーに読み取り、カウンターをインクリメントして、どれだけの量を記録するかを記録します。読んだことがあります。ストリームで何をしたいのかについての情報は実際には提供されていません。)
原則としてはわかりません(書き込みを停止しないピアを検討してください)。また、必要ありません。固定サイズのバッファを使用して、ループで読み取りと書き込みを行うだけです。NIOは魔法の解決策を提供していません。
追加のオプションがいくつかあります。
入力ストリームのブロックの性質に応じて、ストリームでavailable()を呼び出すことができます。
ストリームが小さい場合は、それらをPushbackInputStreamに書き込み、バイトをカウントしてから巻き戻すことができます。
you can get the size of InputStream using getBytes(inputStream) of Utils.java check this following link