Java NIO之Buffer

  • 时间:2018-12-08 23:35 作者:匠丶 来源:匠丶 阅读:70
  • 扫一扫,手机访问
摘要:Buffer是固定大小的数据的容器,其作用是一个存储器,或者者分段运输区,在这里数据可被存储并在之后用于检索。缓冲区的工作与通道紧密联络,待传递出去的数据被置于一个缓冲区,被传送到通道;待传回的缓冲区的传输,一个通道将数据放置在所提供的缓冲区中。这种在协同对象之间进行的缓冲区数据传递是高效数据解决的关

Buffer是固定大小的数据的容器,其作用是一个存储器,或者者分段运输区,在这里数据可被存储并在之后用于检索。缓冲区的工作与通道紧密联络,待传递出去的数据被置于一个缓冲区,被传送到通道;待传回的缓冲区的传输,一个通道将数据放置在所提供的缓冲区中。这种在协同对象之间进行的缓冲区数据传递是高效数据解决的关键。

Buffer类的层次图

下图是Buffer类的层次图。在顶部是通用Buffer类,Buffer定义所有缓冲区类型共有的操作,无论是它们所包含的数据类型还是可能具备的特定行为:


Buffer的属性

缓冲区是包在一个对象内的基本数据元素数组。Buffer类相比一个简单数组的优点是它将关于数据的数据内容和信息包含在一个单一的对象中,Buffer类以及它专有的子类定义了一个用于解决数据缓冲区的API。所有的缓冲区都具备四个属性来提供关于其所包含的数据元素的信息:

属 性作 用
capacity容量,指缓冲区能够容纳的数据元素的最大数量,这一容量在缓冲区创立时被设定,并且永远不能被改变
limit上界,指缓冲区的第一个不能被读或者写的元素,或者者说是,缓冲区中现存元素的计数
position位置,指下一个要被读或者写的元素的索引,位置会自动由相应的get()和put()函数升级
mark标记,指一个备忘位置,调用mark()来设定mark=position,调用reset()来设定postion=mark,标记未设定前是未定义的

下面简单详情几个常用方法调用后,属性的变化。开拓一个起始容量为10的缓冲区:



put() 方法



flip() 方法,将Buffer从写模式切换到读模式
image.png

rewind()方法,将position设回0,limit保持不变,用于重读Buffer中的所有数据



Buffer读写模式下属性的变化

Buffer的使用

最后以一段代码,简单详情以下Buffer的使用

 public class TestMain  {      /**       * 待显示的字符串       */      private static String[] strs =       {          "Hello World"     };          /**      * 标识strs的下标索引      */     private static int index = 0;          /**      * 向Buffer内放置数据      */     private static boolean fillBuffer(CharBuffer buffer)     {         if (index >= strs.length)             return false;                  String str = strs[index++];         for (int i = 0; i < str.length(); i++)         {             buffer.put(str.charAt(i));         }                  return true;     }          /**      * 从Buffer内把数据拿出来      */     private static void drainBuffer(CharBuffer buffer)     {         while (buffer.hasRemaining())         {             System.out.print(buffer.get());         }         System.out.println("");     }          public static void main(String[] args)     {         CharBuffer cb = CharBuffer.allocate(100);         while (fillBuffer(cb))         {             cb.flip();             drainBuffer(cb);             cb.clear();         }     } }
  • 全部评论(0)
最新发布的资讯信息
【网页前端|】从BAT大数据工程师那里总结的大数据学习方法(2019-05-23 11:46)
【系统环境|Linux】值得了解的十大数据发展趋势(2019-05-22 11:33)
【系统环境|软件环境】如何成为一名大数据工程师?(2019-05-20 12:11)
【系统环境|Linux】大数据四大常识,不会你敢说自己在做大数据?(2019-05-19 11:39)
【系统环境|】需要同时掌握AVA和Linux,才可以继续大数据课程的学习(2019-05-18 10:28)
【系统环境|软件环境】学习大数据,一定要了解大数据的这些用途(2019-05-16 10:49)
【系统环境|Linux】bt宝塔控制面板mysql频繁自动停止详细解决办法(2019-05-16 08:52)
【系统环境|】大数据零基础学习路线,新人记得保存收藏哦(2019-05-15 10:54)
【系统环境|】全网最全最新的大数据系统学习路径(2019-05-14 15:38)
【系统环境|Linux】毕业设计:音乐分享系统(2019-05-14 07:48)
手机二维码手机访问领取大礼包
返回顶部