缓冲区(buffer)是即将写入通道(channel)或刚从通道读取的一段数据。它是一个保存数据并充当NIO通道端点的对象。缓冲区为数据访问和读写过程提供了一种正式的机制。这是NIO和旧的JavaI/O之间的主要区别。以前直接从流中读写数据,现在可以从缓冲区中读写数据。在NIO中,通道是流的同义词。要了解更多关于NIO通道的信息,请阅读之前的教程JavaNIO通道。NIO缓冲区特性JavaNIO的基本构建块是缓冲区。缓冲区提供了一个固定大小的容器来读取数据。每个缓冲区都是可读的,但只有特定的缓冲区是可写的。缓冲区是通道的端点。只读缓冲区的内容是不可变的,但它的标记、位置和界限都是可变的。默认情况下,缓冲区不是线程安全的。缓冲区类型每个原始类型都有相应的缓冲区类型。所有缓冲区类都实现了Buffer接口。最常用的缓冲区类型是ByteBuffer。以下是JavaNIO包中提供的缓冲区类型。ByteBufferCharBufferShortBufferIntBufferLongBufferFloatBufferDoubleBufferMappedByteBuffer缓冲区容量缓冲区有固定大小,我们只能存储小于“固定大小”的数据,固定大小的值称为缓冲区容量。一旦缓冲区已满,必须先将其清空,然后才能再次写入。一旦设置了容量,它就不会在缓冲区的生命周期内改变。缓冲区限制在写入模式下,缓冲区限制等于容量。在读取模式下,limit指向缓冲区中最后一个数据位之后的位。在写入缓冲区时,边界一直递增。缓冲区限制总是大于或等于零且小于或等于容量,0<=限制<=容量。bufferlocationlocation指向缓冲区的当前地址。创建缓冲区时,位置设置为零。在读取和写入期间,该位置会递增到下一个索引位置。位置总是在零和界限之间。缓冲区标记标记类似于为缓冲区添加书签。调用mark()时记录当前位置,调用reset()时恢复标记位置。缓冲区翻转、清除和倒回缓冲区flip()flip()方法用于准备缓冲区、执行获取操作或准备新的写入序列。flip()将边界设置为当前位置,然后将位置设置为0。Bufferclear()clear()方法用于为放置操作准备缓冲区或准备新的读取序列。clear()将bounds设置到capacity的位置,并将position设置为0。Bufferrewind()rewind()方法用于再次读取获取的数据。rewind()将缓冲区位置设置为0。如何读取NIO缓冲区首先创建一个缓冲区并分配容量。Buffer有一个返回Buffer对象的allocate(size)方法。ByteBufferbyteBuffer=ByteBuffer.allocate(512);进行翻转操作,准备读操作。byteBuffer.flip();数据可以在下面读取。intnumberOfBytes=fileChannel.read(byteBuffer);然后可以从缓冲区中读取数据。charc=(char)byteBuffer.get();NIObuffer的写法创建buffer并分配容量。ByteBufferbyteBuffer=ByteBuffer.allocate(512);//容量设置为512写入数据。byteBuffer.put((byte)0xff);以上是读写缓冲区的两个例子。缓冲区的种类很多,读写的方法也很多。您可以根据您的使用要求进行选择。原文链接:javapapers翻译:ImportNew.com-lemeilleur翻译链接:http://www.importnew.com/16721.html
