2013-10-29 100 views
0
@Override 
public void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws Exception 
{ 
} 

我需要将消息作为字节流读取。但它并不保证收到完整的信息。我需要丢弃包含少于16个字节的消息。当字节的全部长度达到16时,我需要解码并使用它们。在任何情况下,如果它调用17个字节,那么我只需要处理16个字符,并在下一个循环中保留另一个字节。 reset()和mark()帮助我解决这个问题。有什么方法可以让米娜缓冲吗?或者我必须使用我自己的缓冲区?从Mina.MessageReceived()读取字节流

回答

0
  1. 小于16,您可以设置IoBuffer放置缓冲区的位置。
  2. 等于16,这是真的,所以你可以解码它。
  3. 大超过16,则可以切出前16个字节进行解码,并保存留字节到当前会话
+0

所以对于1)IoBuffer缓冲液=(IoBuffer)消息;如果它小于16,我应该怎么称呼?什么确切的方法。 2)好的。 3.)我怎样才能保存进入会话?你是否建议将一个增长的字节[]附加到ioSession中? ,谢谢你的回复 – dinesh707

+0

1,你可以调用方法buffer.position(buffer.limit()),否则,mina框架会调用messageReceived方法。 –

+0

2,是的,你可以保存一个字节[]中的剩余字节,或者一个新的IoBuffer包含剩余字节或其他结构,只要能保存数据,那么当你的程序接收到下一个数据时,你应该先检查会话 –