创建非阻塞的Socket服务器<二>

今天在公交车上遇到了扒手!司机提示了好多次说“请注意扒手”,我猜想司机一定看到了"熟悉的面孔"所以才这么说的。。。结果不出所料,一个男同胞的手机被扒了,司机很恼怒,汗。。。算了不说了。。说了伤心,尽管不是我的手机被偷!

上一篇文章我对NIO的包进行全面的概括,下面我们就详细的讲讲这些类。

首先讲一下Buffer 这个类是一个抽象类,继承自Object!

这个类是缓冲区由于数据的输入和输出相对于其他的操作是很消耗资源的,而缓冲区正好可以帮助我们改善这些情况。
它从两个方面来提升效率:
减少对实际物理内存的频繁操作
缓冲区被创建就分配了内存,他能够被重用,而不至于让我们频繁的动态创建和回收。
Buffer这个类的作用就类似与BufferedInputStream 和 BufferedOutputStream BufferedRead
BufferedWriter.

来看看API 中 Buffer的具体方法和属性。

capacity //定义了缓冲区的容量,也就是可以保存多少数据
limit//定义了缓冲区的极限,当前缓冲区的终点
postion//读取的位置

那么怎么改变他们呢?

clear();//设置极限为容量 并把将要读取的位置设置为0
flip();//设置极限为位置,并把位置设置为0
rewind();//不修改极限,但把位置设置为0

前面已经提到,Buffer是一个抽象类所以他不能实例化,她有多个子类,每一种基本类型都有它对应的缓冲类但是boolean除外!此外还有就是ByteBuffer这个子类,它定义了存放数据的字节单元,但是他不能实例化只能通过静态方法来得到他的对象集体方法如下:

allocate(int capacity)//返回指定大小的缓冲区
allocateDirect(int capcaity)//返回新的缓冲区

以上两个方法我并没有找到具体的区别性能上也米有测试,希望做过研究的同学给说一下!
先说到这里。。心情不好!等我调整一下心情在写~


好了接着说其他的类,Charset 这个类

它包含的方法我们这里只需要记住两个就行了

encode(String str) //返回的是ByteBuffer
decode(ByteBuffer bb)//返回的是CharBuffer

不管是ByteBuffer 还是CharBuffer 都是Buffer的子类。那么推测Buffer的另一种用途就是帮助这些基本类型之间进行转换,我们可以按照指定的形式来转换自己的数据!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值