快速业务通道

用Java的New IO开发网络协议 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
receive() throws IOException, MessageFormatException; /** * 发送一条消息 */ public void send(Message message) throws IOException; }

用Java的New IO开发网络协议(3)

时间:2010-12-11

5. BufferUtil类

这是一个Utility类,主要功能是从ByteBuffer中取得或者放入一个字符串String,不同的协议有不同的字符串处理方法。

class BufferUtil { /** * 从buffer取得一个字符串,length为长度 */ static String getString(ByteBuffer buffer, int length); /** * 从buffer取得一个以''\0''结束的字符串,length为最大长度 */ static String getCString(ByteBuffer buffer, int length); /** * 从buffer取得一个变长的字符串,长度用两字节的short类型表示 */ static String getVarStringShortLength(ByteBuffer buffer); /** * 从buffer取得一个变长的字符串,长度用四字节的int类型表示 */ static String getVarStringIntLength(ByteBuffer buffer); /** * 从buffer取得一个变长的字符串,长度用一字节的byte表示 */ static String getVarStringByteLength(); /** * 在buffer中放入一个字符串,length为长度 */ static void putString(ByteBuffer buffer, String str, int length); /** * 在buffer中放入一个字符串,length为最大长度。如果str没有达到最大长度,那么用0填充。 */ static void putCString(ByteBuffer buffer, String str, int length); /** * 在buffer中放入一个字符串,长度用一个short表示 */ static void putVarStringShortLength(ByteBuffer buffer); /** * 在buffer中放入一个字符串,长度用一个int表示 */ static void putVarStringIntLength(ByteBuffer buffer); /** * 在buffer中放入一个字符串,长度用一个byte表示 */ static void putVarStringByteLength(ByteBuffer buffer); }

目前,这个类没有考虑编码方式,可以对这个类进行扩充。

在这个框架中,Message.receive是最复杂的部分,下面对该过程的流程进行说明:

(1) 根据MessageFactory.getMessageHeaderLength()返回的消息头长度,接收消息头。

(2) 用MessageFactory.createMessageHeader() 构造消息头,并调用MessageHeader.buildFromBuffer()取得消息头数据。

(3) 根据消息头中的信息,接收消息体

(4) 构造消息,并调用Message.buildBodyFromBuffer()取得消息体数据。

(5) 调用Message.setHeader()。

(6) 返回构造的消息。

这其中有一个步骤出错,将抛出MessageFormatException。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号