0

我正在使用 javas NIO 包构建一个非阻塞服务器,并且有几个关于验证接收到的数据的问题。

我注意到,当我在套接字通道上调用 read 时,它会尝试填充它正在读取的字节缓冲区(根据文档)。当我从客户端向服务器发送 10 个字节时,服务器会将这十个字节读入字节缓冲区,字节缓冲区中的其余字节将保持为零,从读取操作返回的数字将是即使客户端只写了 10 个字节,我的字节缓冲区的大小。

我想弄清楚的是,当服务器从套接字通道读取时(在上述情况下,是 10 而不是 1024),是否有办法获取客户端发送到服务器的字节数。

如果这不起作用,我知道我可以通过将分隔符与我的“指令集标头”结合使用,将来自客户端的所有实际接收数据与存储在字节缓冲区中的“多余”数据分开,但似乎像这样应该存在,所以我不得不怀疑我是否只是遗漏了一些明显的东西,或者是否有一些低层次的原因导致无法做到这一点。

谢谢 :)

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 回答