WEB开发网
开发学院软件开发Java 深入理解Apache Mina (6)---- Java Nio Byt... 阅读

深入理解Apache Mina (6)---- Java Nio ByteBuffer与Mina ByteBuffer的区别

 2009-09-16 00:00:00 来源:WEB开发网   
核心提示: 上面只是一个简单的演示程序,功能是实现对字符串的读写,深入理解Apache Mina (6)---- Java Nio ByteBuffer与Mina ByteBuffer的区别(3),比较“ 笨 ” ,呵呵,所有对 ByteBuffer 的操作都可以通过该类提供的方法来

上面只是一个简单的演示程序,功能是实现对字符串的读写,比较“ 笨 ” ,呵呵。关于如何向 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 的源码。

上一页  1 2 3 

Tags:深入 理解 Apache

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接