0

javas NIOパッケージを使用してノンブロッキングサーバーを構築していますが、受信したデータの検証についていくつか質問があります。

ソケットチャネルでreadを呼び出すと、(ドキュメントに従って)読み取っているバイトバッファをいっぱいにしようとすることに気づきました。クライアントからサーバーに10バイトを送信すると、サーバーはそれらの10バイトをバイトバッファーに読み込み、バイトバッファーの残りのバイトはゼロのままになり、読み取り操作から返される数値はクライアントが10バイトしか書き込んでいないのに、バイトバッファのサイズ。

私が理解しようとしているのは、サーバーがソケットチャネルから読み取るときにクライアントがサーバーに送信したバイト数だけを取得する方法があるかどうかです(上記の場合、1024ではなく10)。

それがうまくいかない場合は、クライアントから実際に受信したすべてのデータを、「命令セットヘッダー」などと組み合わせて区切り文字を使用することで、バイトバッファに格納されているこの「過剰な」データから分離できることを知っていますが、そうではないようですこのように存在するはずなので、明らかな何かが欠けているだけなのか、それともこれができない低レベルの理由があるのか​​疑問に思う必要があります。

ありがとう :)

4

1 に答える 1

1

flip()おそらく、バッファでノートリアスを呼び出すのを忘れていました。

buffer.clear();
channel.read(buffer);
buffer.flip();
// now you can read from the buffer
buffer.get...

署名を次のように変更する必要がありますnio.sucks

于 2010-07-15T18:52:37.983 に答える