0

ファイル転送アプリケーション(大きなファイル)を持っていますが、拡張できるようにしたいと思います。非同期コールバックを使用して、16Kbのチャンクでメッセージを読み取ります。メッセージを受信するたびに、それを「解読」して処理するクラスに送信します。使用される形式は単純です:(int)Command->(int)MsgLen->(String)Msg。

これはほんの一例です。私が抱えている問題は、複数の読み取りを実行したい場合、これを処理するための最良の方法は何ですか?1回の読み取りに複数のコマンドがある場合はどうなりますか?たとえば、私は終わりに近づき、完全な4バイトではなく、コマンドに2バイトしかありませんか?

キューについて考えましたが、バイトを抽出して変換するのは面倒です。より良いオプションはありますか?

4

1 に答える 1

1

最も簡単な方法はbyte[]、すべての未処理のデータの配列(または同様のデータ構造)を保持することです。新しいデータが到着したら、常にその配列に追加してから、完全に受信したメッセージのみを削除してください。

心配する必要があるのは、別のメッセージの処理中にメッセージを受信した場合だけです。そのため、byte[]配列の操作をロックする必要があります。

これを実行するためのより多くの「賢い」方法がありますが、ほとんどの状況では、最も単純な方法が最適です。

于 2012-07-10T12:46:53.350 に答える