`

NIO框架-Buffer学习

阅读更多

一:Buffer是什么?

  • Buffer是java.nio框架下的一个缓冲类,用来存储java的基本类型的数据,比如byte,char,long,int,double,
  • short等数据的类型.缓冲区是一个可以读写的数据,nio的通道通过Buffer来读写数据,比如从通道channel读数据的时候,会先把一块的数据都到缓冲区中.把数据写入到通道的时候,同样会先把数据存储到缓冲区中.
  • 它是nio框架的核心类,它是一个抽象类,它的子类包括 ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、 IntBuffer、LongBuffer 和 ShortBuffer.

二:Buffer重要属性:

Buffer中里定义类四个属性,mark,position,limit,capacity,那这四个属性又是做什么用呢?

1. Cpapcity:表示容量,表示缓冲区可以存储的最大的容量 

2. Limit : 表示缓冲区的上限,在文档中这样解释:

A buffer's limit is the index of the first element that should not be read or written.

limit 的值是第一个不能读写的元素的位置,比如limit = 512,表示从512这个位置开始的空间不能读写,就不能用. position

3.mark : 一个标记位置,标记重置的位置,在文档中这样说到:

A buffer's mark is the index to which its position will be reset when the {@link #reset reset} method is invoked

4.position : 当前缓存可以读取的索引位置

三:Buffer操作

缓冲的通常操作包括读取缓冲数据和写入缓冲数据,除了这之外,buffer还提供了清空缓冲、反转和rewinding(倒卷,这个词不知道如何翻译好)

1. clearing : 清空缓存,但是不清除缓存的数据. 代码如下

 public final Buffer clear()

    {

         position = 0;

      limit = capacity;

      mark = -1;

      return this;

  }

  

2.Flip: flip buffer,按字面理解是反转缓存,那么怎么反转缓存呢?看下面的代码就比较清楚了.

    public final Buffer flip() {

    limit = position;

    position = 0;

    mark = -1;

    return this;

    }

  

 

看上面的代码就知道了,缓存区的上界为position,position以后的缓存区不可用,这个缓存区的当前位置从0开始.

3.rewind :rewind操作让当前的缓冲区的位置从0开始,mark=-1,就等于重置缓存区,从缓存区的0位置开始读取. 代码如下:

  

     public final Buffer  rewind() {

     position = 0;

     mark = -1;

     return this;

     }

  

  

 

四:非线程安全

非线程安全:Buffer是非线程安全,如果一个缓存区被多个线程使用的话,需要通过synchronization来控制线程安全.

总结:

 

  • Buffer是nio框架的一个核心类也是一个基础类,是一个用来存储java的基本类型的数据的缓存对象. 子类包括 :ByteBuffer 、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、ShortBuffer.
  • 重要的属性包括 capacity,mark,position,limit.capacity表示缓冲区的容量,mark表示重置的时候的标记, position表示当前缓存区可用读取的位置,limit表示缓存区可以操作的上界.
  • Buffer是一个抽象类,已经提供了clearing、flip、rewind3个重要操作,clearing表示是清空缓存数据,
  • flip表示是对反转当前缓存区,rewind表示重新读取缓存区的数据.
  • Buffer是一个非线程安全的类.

 

分享到:
评论

相关推荐

    Netty应用说明笔记

    虽然JAVA NIO框架提供了 多路复用IO的支持,但是并没有提供上层“信息格式”的良好封装。例如前两者并没有提供针对 Protocol Buffer、JSON这些信息格式的封装,但是Netty框架提供了这些数据格式封装(基于责任链模式...

    jack netty 5,适用与android和服务器.rar

    换句话说,Netty是一个NIO框架,使用它可以简单快速地开发网络应用程序,比如客户端和服务端的协议。Netty大大简化了网络程序的开发过程比如TCP和UDP的 Socket的开发。 "快速和简单"并不意味着应用程序会有难维护...

    Apache_Mina2.0学习笔记

    最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 引言 1 一. Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长...

    BAT面试真题最新(涵盖全方面)

    java NIO的⼯工作原理 由⼀一个专⻔门的线程来处理理所有的 IO 事件,并负责分发。 事件驱动机制:事件到的时候触发,⽽而不不是同步的去监视事件。...应⽤用程序可以使⽤用Executor框架来创建线程池

    Mina 文档doc

    • Multipurpose Infrastructure for Network Applications • 一个基于非阻塞I/O的网络框架。...如果你使用MINA,你将不需要直接使用NIO buffers,因为仅使用MINA buffers就可以完成大多数buffer操作

    Java 基础核心总结 +经典算法大全.rar

    缓冲区(Buffer)通道(Channel) 示例:文件拷贝案例 BIO 和 NIO 拷贝文件的区别操作系统的零拷贝 选择器(Selectors) 选择键(SelectionKey) 示例:简易的客户端服务器通信 集合 集合框架总览 -、Iterator Iterable ...

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    com.yangc.hub:基于Netty的消息推送服务器实现

    com.yangc.hub基于Netty的初级推送服务器实现Netty - 强大的网络应用程序框架,封装了java nio,基于事件驱动的异步api。ActiveMQ - apache的一款消息服务器,这里主要用于多台推送服务器间进行消息传送,达到负载...

    JAVA上百实例源码以及开源项目

    笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此...

    JAVA核心知识点整理(有效)

    1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ........................

Global site tag (gtag.js) - Google Analytics