2010-07-15 65 views
0

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

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

我想弄清楚的是,如果有一种方法可以获得当服务器从套接字通道(在上述情况下,而不是1024)读取客户端发送到服务器的字节数。

如果这不起作用,我知道我可以通过使用分隔符与我的“指令集头”一起使用分隔符,将来自客户端的所有实际接收到的数据从存储在字节缓冲区中的“过量”数据中分离出来,但它似乎应该存在,所以我不得不怀疑,如果我只是错过了一些明显的东西,或者如果有一些低层次的原因,为什么不能这样做。

谢谢:)

回答

1

你可能忘了打电话给臭名昭著的flip()上你的缓冲区。

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

我需要我的签名更改为nio.sucks

+0

嘎!你是对的,我现在觉得自己像个傻瓜! 谢谢 – vimalloc 2010-07-15 20:01:22