available()
Javaでのソケットプログラミングでの使用は信頼できますか?
読み取りメソッドを呼び出すときにブロックされないように、読み取りに使用できるバイトがあるときにそれが通知されるようにするだけです。
BufferedInputStream.available()
に依存しInputStream.available()
ます。
InputStream.available() のドキュメントには、次のように書かれています。
InputStream の一部の実装はストリーム内の合計バイト数を返しますが、多くはそうではないことに注意してください。このメソッドの戻り値を使用して、このストリーム内のすべてのデータを保持するためのバッファーを割り当てることは決して正しくありません。 http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#available()
正しいバイト数が得られるかどうかは気にしませんが、読み取り可能なバイトがある場合に 0 が返されないだけです。BufferedInputStream.available() が Windows と Linux でこの目的のために常に機能するかどうかを知りたいです。
また、ドキュメントの「実装」が何を意味するのかわかりません。それは何を指していますか?InputStream のサブクラスに? 異なるオペレーティング システムで Java するには? 異なる JVM に?
Windows、Linux、またはその他のシステムで available() を使用して、機能しなかった人はいますか?