数据对于输入和输出的操作耗时是非常严重的问题,如果把这个问题放入到网络上去看待更甚是值得注意的一个问题了。假如结合基础的OS知识我们也知道如果要减少这种I/O操作的耗时或者也可以说提升这种效率的话,最大的可能就是减少物理读写的次数,而且尽可能做到主存数据的重读性(操作系统也在加强说明更多减少抖动现象的产生)。
在java.nio包中我们可以直接来操作相对应的API了。可以让java更加方便的直接控制和运用缓冲区。缓冲区有几个需要了解的特定概念需要详尽来解释,才能更好的知道我们下面一些列需要针对的问题实质。
属性
容量(capacity):顾名思义就是表示缓冲区中可以保存多少数据;
极限(limit):缓冲区中的当前数据终结点。不过它是可以动态改变的,这样做的好处也是充分利用重用性;
位置(position):这个也好理解,其实就是指明下一个需要读写数据的位置。
上面上个关系还可以具体用图示的方式来表达整体概念,如下图所示:
在极限的时候就说到可以修改它,所以对于它的操作由以下方法:
l clear():首先把极限设置为容量,再者就是需要把位置设置为0;
l flip():把极限设置为位置区,再者就是需要把位置设置为0;
l rewind():不改变极限,不过还是需要把位置设置为0。
最为最基础的缓冲区ByteBuffer,它存放的数据单元是字节。首先要强调的是ByteBuffer没有提供公开的构造方法,只是提供了两个静态的工厂方法。
l allocate(int capacity):返回一个ByteBuffer对象,参数表示缓冲区容量大小。
l allocateDirect (int capacity):返回一个ByteBuffer对象,参数也是一样表示缓冲区容量大小。
在这里需要注意的是在使用两者的时候需要特别小心,allocateDirect和当前操作系统联系的非常紧密,它牵涉到使用native method的方法,大家知道一旦本地方法就是需要考虑调用dll(动态链接库)这个时候基本也就失去了JAVA语言的特性,言外之意对于耗资源非常大。所以如果考虑到当前使用的缓存区比较庞大而且是一个长期驻留使用的,这个时候可以考虑使用它。
posted on 2009-02-13 20:56
叶澍成 阅读(228)
评论(0) 编辑 收藏 所属分类:
java基础 、
NIO学习