Java でソケットを使用する場合、処理を開始する前に、クライアントがすべての (バイナリ) データの送信を終了したかどうかをどのように確認できますか。たとえば、次のように考えてください。
istream = new BufferedInputStream (socket.getInputStream());
ostream = new BufferedOutputStream(socket.getOutputStream());
byte[] buffer = new byte[BUFFER_SIZE];
int count;
while(istream.available() > 0 && (count = istream.read(buffer)) != -1)
{
// do something..
}
// assuming all input has been read
ostream.write(getResponse());
ostream.flush();
thisなどのSOに関する同様の投稿を読みましたが、決定的な答えが見つかりませんでした。上記のソリューションは機能しますが、クライアントがすべてのデータの送信を終了したかどうかを実際に判断することはできないと理解しています。たとえば、クライアント ソケットがいくつかのデータ チャンクを送信し、別のデータ ソースからのデータを待機してからさらにデータを送信できるようにブロックする場合、上記のコードは、クライアントが istream.available() 以降のすべてのデータの送信を完了したと想定する可能性があります。現在のバイト ストリームに対して 0 を返します。