我正在使用javas NIO包构建一个非阻塞服务器,并且有几个关于验证接收数据的问题。
我注意到当我在套接字通道上调用read时,它会尝试填充它正在读取的字节缓冲区(根据文档)。当我从客户端向服务器发送10个字节时,服务器将这十个字节读入字节缓冲区,字节缓冲区中的其余字节将保持为零,并且从读取操作返回的数字将是我的字节缓冲区的大小,即使客户端只写了10个字节。
我想弄清楚的是,当服务器从套接字通道读取时,是否有办法获得客户端发送到服务器的字节数(在上面的例子中,10而不是1024)。
如果这不起作用,我知道我可以通过使用分隔符和我的'指令集头'来分离存储在字节缓冲区中的这些“多余”数据,从客户端获得所有实际接收的数据,不然,但似乎这应该存在,所以我不得不怀疑我是否只是错过了一些明显的东西,或者是否有一些低级别的原因导致无法做到这一点。
谢谢:)
答案 0 :(得分:1)
你可能忘了在你的缓冲区上打电话给臭名昭着的flip()
。
buffer.clear();
channel.read(buffer);
buffer.flip();
// now you can read from the buffer
buffer.get...
我需要将签名更改为nio.sucks