这一章学习nio中的Buffer使用。
1、Buffer概述
Buffer可以认为是在内存中划分了块,这些区间允许往里面写数据和从里面读数据。这些内存块被包装
成了NIO Buffer对象,方便使用。
2、Buffer基本使用
使用Buffer进行数据读写,需要如下四步:
1、往Buffer中写入数据:通常使用Channel来完成。
2、调用 buffer.flip()方法:这个方法将Buffer从写模式(writing)转换为读模式(reading)。
3、
从Buffer中读取数据。
4、调用 buffer.clear()
或者 buffer.compact()方法:clear方法清空整个Buffer,compact
方法将Buffer中未读取的内容安排至Buffer的开始位置。
3、Buffer Capacity, Position and Limit
capacity,position and limit是Buffer三个重要的属性。先看图:
Buffer capacity, position and limit in write and read mode.
描述如下:
- capacity:Buffer的容量,Buffer可以写入数据的容量大小,已Byte为单位。
- position:指示当前数据读写的位置,主要是在于高速Buffer下个要读或者写的位置是什么。
- limit:写入数据时与capacity概念一样,表示可以写入多少数据;读数据代表可读多少数据。
4、Buffer 的类型
- ByteBuffer
- MappedByteBuffer
- CharBuffer
- DoubleBuffer
- FloatBuffer
- IntBuffer
- LongBuffer
- ShortBuffer
可将各种数据类型对Buffer读写。其中,MappedByteBuffer比较特殊,后面再提。
4、Buffer 的分配、写数据、flip、读数据
空间分配:每种Buffer的类型都有allocate()方法,用来分配初始Buffer的大小。 写数据:两种方式,一是从Channel写入Buffer;二是通过代码put方法放入数据。
flip:flip方法,表示buffer已经写完数据了,可以进行读了。
读数据:两种方式,一是将Buffer的数据写入Channel中;二是通过get方法获取数据。
5、rewind、clear与compact、mark与reset
rewind方法:将position属性重置为0,可以重读Buffer中的内容。
clear与compact:clear清空整个Buffer,数据被清除,position被设置为0,从读模式转换为写模式;
compact清空已读的数据,将未读的数据放置在前面,position被设置为未读的数据位置。
mark与reset:mark标记已读的位置,当想回到这个标记的时候,调用reset方法,将会回来。