java - 验证非阻塞服务器中接收到的数据

标签 java nio delimiter socketchannel

我正在使用 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/

相关文章:

C++ - 读取 3D 模型

java - 如果 MouseListener 事件方法已经在运行,如何触发它

java.nio.file.Path.contains(subPath)?

Java NIO 和 Windows 磁盘访问

java - 从文件路径初始化对象变量

text - 为什么字段分隔符必须只有一个字节?

java - JTextPane 换行行为

java - 试图将一堆 C++ 代码转换为 Java - if 语句

java - 如何重新加载 JPanel?

javascript - 如何向返回值添加分隔符,并为分隔符指定默认值?