TCPを介して実装された単純なプロトコルがあり、各メッセージは次のもので構成されていると仮定します。
int
指示データ長。- 1で指定された長さのバイナリデータ。
そのようなメッセージを読んで、私は次のようなものが欲しいです:
int length = input.ReadInt();
byte[] data = input.ReadBytes(length);
使用中Socket.Receive
またはNetworkStream.Read
使用可能なバイト数が読み取られます。バイトが使用可能ReadBytes
になるまで呼び出しをブロックしたい。length
読み取りをループせずに、残りのデータを待機するオフセットで再起動することなく、これを行う簡単な方法はありますか?
実際のアプリケーションでは、読み取りはおそらく非同期またはバックグラウンドスレッドで実行する必要がありますが、今のところそれを無視しています。重要なことは、すべてのデータが利用可能になるまで読み取りが完了しないようにすることです。
編集
私は自分でデータをバッファリングできることを知っており、その方法も知っています。Receive
次のオフセットで続くループです。私が求めているのは、そのようなループの再利用可能な実装があり、いかなる種類の独自のループも必要ないかどうかです(または、すべてのデータが利用可能になったときに終了する再利用可能な非同期実装)。