我正在使用 javas NIO 包构建一个非阻塞服务器,并且有几个关于验证接收到的数据的问题。
我注意到,当我在套接字 channel 上调用 read 时,它将尝试填充它正在读取的字节缓冲区(根据文档)。当我从客户端向服务器发送 10 个字节时,服务器会将这 10 个字节读入字节缓冲区,字节缓冲区中的其余字节将保持为零,从读取操作返回的数字将是我的字节缓冲区的大小,即使客户端只写入了 10 个字节。
我想弄清楚的是,是否有一种方法可以获取当服务器从套接字 channel 读取时客户端发送到服务器的字节数(在上面的情况下,是 10 而不是 1024)。
如果这不起作用,我知道我可以通过使用分隔符与我的“指令集 header ”结合使用,将所有实际从客户端接收到的数据与存储在字节缓冲区中的“多余”数据分开,但似乎这应该存在,所以我不得不想知道我是否只是错过了一些明显的东西,或者是否存在一些低级原因导致无法做到这一点。
谢谢:)
最佳答案
您可能忘记在缓冲区上调用臭名昭著的flip()
。
buffer.clear();
channel.read(buffer);
buffer.flip();
// now you can read from the buffer
buffer.get...
我需要将签名更改为nio.sucks
关于java - 验证非阻塞服务器中接收到的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3257883/