缓冲区是包在一个对象内的基本数据元素数组,其有四个重要属性
容量( Capacity):缓冲区能够容纳的数据元素的最大数量,容量在缓冲区创建时被设定,并且永远不能被改变。
上界(Limit):缓冲区的第一个不能被读或写的元素。或者说,缓冲区中现存元素的计数。
位置(Position):下一个要被读或写的元素的索引。位置会自动由相应的 get( )和 put( )函数更新。
标记(Mark):一个备忘位置。调用 mark( )来设定 mark = postion。调用 reset( )设定 position = mark。标记在设定前是未定义的(undefined)。
当对缓冲区进行比较时,判定两个缓冲区相同充要条件如下
· 两个对象类型相同。包含不同数据类型的 buffer 永远不会相等,而且 buffer绝不会等于非 buffer 对象。
· 两个对象都剩余同样数量的元素。Buffer 的容量不需要相同,而且缓冲区中剩余数据的索引也不必相同。但每个缓冲区中剩余元素的数目(从位置到上界)必须相同。
· 在每个缓冲区中应被 get()函数返回的剩余数据元素序列必须一致。
如果不满足以上任意条件, 两个缓冲区的比较就会返回 false。
当两个缓冲区不一样长,进行比较时,如果一个缓冲区在不相等元素发现前已经被耗尽,较短的缓冲区被认为是小于较长的缓冲区。
当缓冲区与数组进行交互时,如果缓冲区中的数据不够完全填满数组,就会得到一个异常。这意味着如果想将一个小型缓冲区传入一个大型数组,就必须明确地指定缓冲区中剩余的数据长度。如果缓冲区有足够的空间接受数组中的数据( buffer.remaining()>myArray.length),数据将会被复制到从当前位置开始的缓冲区,并且缓冲区位置会被提前所增加数据元素的数量。如果缓冲区中没有足够的空间,那么不会有数据被传递,同时抛出BufferOverflowException 异常。