java新IO之Buffer
1、什么是java新IO
在jdk1.4之后呢,为了提高IO操作的性能,提供了一个新的开发包,NIO,此
包定义在java.nio.*中。
在java中,已有的IO操作大部分都属于阻塞的操作,例如,键盘输入数据,
必须一直等待用户输入数据,否则程序不能继续执行。另外,还有socket程
序中服务器必须通过accept()方法等待用户连接,这就造成了大量的系统
资源的浪费。所以呢在jdk1.4之后引入了新IO,在整个新IO的操作基本上都
是使用缓冲区来完成的。
2、Buffer-->缓冲区
在基本io操作中,所有的操作都是以流的形式完成的,但是在新IO中所有的
操作都是要使用到Buffer,所有的读写操作都是通过缓冲区完成的。
2、1 Buffer:
是一个线性的,有序的数据集,只能容纳某种特定类型数据。
在jdk api 1.6中是这样定义的:
public abstract class Bufferextends Object一个用于特定基本类型数据
的容器。
缓冲区是特定基本类型元素的线性有限序列。除内容外,缓冲区的基本属性
还包括容量、限制和位置:
缓冲区的容量 是它所包含的元素的数量。缓冲区的容量不能为负并且不能更
改。
缓冲区的限制 是第一个不应该读取或写入的元素的索引。缓冲区的限制不能
为负,并且不能大于其容量。
缓冲区的位置 是下一个要读取或写入的元素的索引。缓冲区的位置不能为负
,并且不能大于其限制。
对于每个非 boolean 基本类型,此类都有一个子类与之对应。
2、2 Buffer的清除、反转和重绕
除了访问位置、限制、容量值的方法以及做标记和重置的方法外,此类还定
义了以下可对缓冲区进行的操作:
clear() 使缓冲区为一系列新的通道读取或相对放置 操作做好准备:它将限
制设置为容量大小,将位置设置为 0。
flip() 使缓冲区为一系列新的通道写入或相对获取 操作做好准备:它将限
制设置为当前位置,然后将位置设置为 0。
rewind() 使缓冲区为重新读取已包含的数据做好准备:它使限制保持不变,
将位置设置为 0
2、3 线程安全
多个当前线程使用缓冲区是不安全的。如果一个缓冲区由不止一个线程使用
,则应该通过适当的同步来控制对该缓冲区的访问。
2、4 调用链
指定此类中的方法返回调用它们的缓冲区(否则它们不会返回任何值)。此
操作允许将方法调用组成一个链;例如,语句序列
b.flip();
b.position(23);
b.limit(42);可以由以下更紧凑的一个语句代替
b.flip().position(23).limit(42);
3、Buffer中的方法
3、1 position方法
@ :public final int position()返回此缓冲区的位置。
@ :public final Buffer position(int newPosition)
设置此缓冲区的位置。如果标记已定义且大于新的位置,则丢弃该标记。
3、2 limit方法
@ :public final int limit()返回此缓冲区的限制。
@ :public final Buffer limit(int newLimit)
设置此缓冲区的限制。如果位置大于新的限制,则将它设置为新限制。如果
标记已定义且大于新限制,则丢弃该标记。
3、3 capacity 容量
public final int capacity() 返回此缓冲区的容量。
java新IO之IntBuffer
1 : put方法,position方法,limit方法,capacity方法
public abstract IntBuffer put(int i)
相对 put 方法(可选操作)。
将给定 int 写入此缓冲区的当前位置,然后该位置递增。
参数:i - 要写入的 int
返回:此缓冲区
抛出: BufferOverflowException - 如果此缓冲区的当前位置不小于界限
ReadOnlyBufferException - 如果此缓冲区是只读的
下面是一个例子:
运行结果截图:
2、 flip方法
public final Buffer flip()
反转此缓冲区。首先将限制设置为当前位置,然后将位置设置为 0。
运行截图: