深入理解Apache Mina (6)---- Java Nio ByteBuffer与Mina ByteBuffer的区别
2009-09-16 00:00:00 来源:WEB开发网上面只是一个简单的演示程序,功能是实现对字符串的读写,比较“ 笨 ” ,呵呵。关于如何向 ByteBuffer 读写字符串会在 IoBuffer 中详细讲解。
(2) IoBuffer简介
IoBuffer是对 ByteBuffer 的扩展,并不是和 ByteBuffer 毫无关系的。对 Mina 或者 Socket 应用来说, ByteBuffer 提供的方法存在一下不足:
1) 它没有提供足够可用的put 和 set 方法,例如: fill 、 get/putString 、 get/putAsciiInt() 等。
2)很难将可变长度的数据放入 ByteBuffer 。
基于以上的缺点,Mina 提供了 IoBuffer 来补充了 ByteBuffer 的不足之处。
Let's drink code,来看看 Mina 的 IoBuffer 是如何读写字符串的。
Java代码
// 获取一个容量为1024字节的ByteBuffer
ByteBuffer buffer = ByteBuffer.allocate(1024);
// 设置系统字符集为utf-8
Charset ch =Charset.forName("utf-8");
// 获取utf-8的编码器
CharsetEncoder encoder = ch.newEncoder();
// 获取utf-8的解码器
CharsetDecoder decoder = ch.newDecoder();
System.out.println(buffer.remaining());
// 进行编码的字符串
String cs = "中國壹石頭";
// 将字符串编码后放入缓存
buffer.putString(cs,encoder);
System.out.println(buffer.remaining());
// 将缓存的位置设为位置
buffer.limit(buffer.position());
// 将缓存的位置设为0
buffer.position(0);
// 读取缓存中的字符串
String str = buffer.getString(decoder);
// 打印输出缓存中的信息
System.out.println(str);
System.out.println(buffer.remaining());
注意此处用到了 Charset ,它的作用在上面已经说道,它主要用来进行编解码的,因此对字符串进行编码和解码时注意要使用相同的编码。
(3) IoBuffer的子类
为了更好的使用IoBuffer 进行开发, IoBuffer 提供了两个子类 BaseByteBuffer 和 ByteBufferProxy 。 BaseByteBuffer 实现了 IoBuffer 中定义的绝大多数方法。如果你在实际开发中要扩展适合于自己的方法时可以继承该类,因为它可以使你的实现更加简单。 ByteBufferProxy 中封装了一个 IoBuffer ,所有对 ByteBuffer 的操作都可以通过该类提供的方法来实现。
本文只是简单的介绍了IoBuffer 和 ByteBuffer 的基本知识,如果需要了解 IoBuffer 更多的信息请参考 Mina 的帮助文档和 Mina 的源码。
- ››Apache添加mod_aspdotnet.so支持ASP.NET配置指南
- ››Apache中改变php.ini的路径
- ››深入理解Android消息处理系统——Looper、Handler...
- ››深入理解SET NAMES和mysql(i)_set_charset的区别
- ››深入理解Mysql字符集设置
- ››Apache2.2与Tomcat6整合及虚拟主机配置
- ››Apache+php+mysql在windows下的安装与配置图解
- ››理解C#中静态Static与单例Singleton
- ››深入浅出实战攻防恶意PDF文档
- ››深入剖析防火墙策略的执行过程:ISA2006系列之六
- ››Apache+Subversion完美结合,CentOS下实现版本控制...
- ››理解 Symbian 中的 ECom
更多精彩
赞助商链接