java的nio缓存是个很重要的概念,下面就已IntBuffer具体的例子说明一下。
注意:
一定要搞清楚position、limit、capacity的意义。
缓冲区的操作
package nio; import java.nio.IntBuffer; public class IntBufferTest { public static void main(String[] args) { IntBuffer buffer = IntBuffer.allocate(10); System.out.println("初始化:position:"+buffer.position()+"、limit:"+buffer.limit()+"、capacity:"+buffer.capacity()); buffer.put(1); int [] temp = {3,5,7,9,11,13}; buffer.put(temp); buffer.put(15); System.out.println("添加元素之后:position:"+buffer.position()+"、limit:"+buffer.limit()+"、capacity:"+buffer.capacity()); buffer.flip();//输出缓冲之前必须调用重新设置(position=0)和(limit等于数据到达缓冲的最大位置,当前10个缓冲位,数据已经占用了8个,所以limit的大小为8)的位置, //因为如果不重新设置则printInfo方法中hasRemaining是打印position到limit之间的元素,它们之间的元素是空的 //由于添加了元素则position的位置发生变化了 System.out.println("调用flip之后:position:"+buffer.position()+"、limit:"+buffer.limit()+"、capacity:"+buffer.capacity()); printInfo(buffer); //设置子缓冲区,实际上就是修改主缓冲区的某一段区域 buffer.position(2);//取出子缓冲区的开头 buffer.limit(5);//子缓冲区的结尾 IntBuffer buffer2 = buffer.slice();//开辟子缓冲区 System.out.println("子缓冲区的大小:"+buffer2.capacity()); for(int i = 0; i<buffer2.capacity();i++) { buffer2.put(buffer2.get(i)-1);//设置子缓冲区的新值 } buffer.flip();//重置主缓冲区 buffer.limit(buffer.capacity());//重现设置限制值,这样才能打印全部缓冲区的内容,因为此时limit的值还是设置子缓冲的时候设置的需要还原 printInfo(buffer); } private static void printInfo(IntBuffer buffer) { while(buffer.hasRemaining()) {//这个是相对取值,简单的来说这个 //迭代器取过一次指针已经发生变化了,不能再取第二次了 System.out.print(buffer.get()+"、");//可以取到 System.out.print(buffer.get()+"、");//报错 //绝对取值,可以取到,这个是通过数组下标的形式多少次都没关系 System.out.println(buffer.get(0)); } System.out.println(); } }
只读缓冲区:
package nio; import java.nio.IntBuffer; public class IntBufferReadOnlyTest { public static void main(String[] args) { IntBuffer buffer = IntBuffer.allocate(10); System.out.println("初始化:position:"+buffer.position()+"、limit:"+buffer.limit()+"、capacity:"+buffer.capacity()); buffer.put(1); int [] temp = {3,5,7,9,11,13}; buffer.put(temp); buffer.put(15); System.out.println("添加元素之后:position:"+buffer.position()+"、limit:"+buffer.limit()+"、capacity:"+buffer.capacity()); buffer.flip();//输出缓冲之前必须调用重新设置(position=0)和(limit等于数据到达缓冲的最大位置,当前10个缓冲位,数据已经占用了8个,所以limit的大小为8)的位置, //因为如果不重新设置则printInfo方法中hasRemaining是打印position到limit之间的元素,它们之间的元素是空的 //由于添加了元素则position的位置发生变化了 System.out.println("调用flip之后:position:"+buffer.position()+"、limit:"+buffer.limit()+"、capacity:"+buffer.capacity()); printInfo(buffer); buffer = buffer.asReadOnlyBuffer();//将此缓冲区设置为只读,不能再进行修改 buffer.put(17);//再次添加报错 } private static void printInfo(IntBuffer buffer) { while(buffer.hasRemaining()) { System.out.print(buffer.get()+"、"); } System.out.println(); } }
直接缓冲区
package nio; import java.nio.ByteBuffer; public class ByteBufferTest { public static void main(String[] args) { //创建一个直接缓冲区,这个是byte缓冲区特有的,这个性能比普通缓冲区要高 ByteBuffer buffer = ByteBuffer.allocateDirect(10); System.out.println("初始化:position:"+buffer.position()+"、limit:"+buffer.limit()+"、capacity:"+buffer.capacity()); byte[] b = {1,3,5,7,9}; buffer.put(b); System.out.println("添加元素之后:position:"+buffer.position()+"、limit:"+buffer.limit()+"、capacity:"+buffer.capacity()); buffer.flip();//输出缓冲之前必须调用重新设置(position=0)和(limit等于数据到达缓冲的最大位置,当前10个缓冲位,数据已经占用了8个,所以limit的大小为8)的位置, //因为如果不重新设置则printInfo方法中hasRemaining是打印position到limit之间的元素,它们之间的元素是空的 //由于添加了元素则position的位置发生变化了 System.out.println("调用flip之后:position:"+buffer.position()+"、limit:"+buffer.limit()+"、capacity:"+buffer.capacity()); printInfo(buffer); } private static void printInfo(ByteBuffer buffer) { while(buffer.hasRemaining()) { System.out.print(buffer.get()+"、"); } System.out.println(); } }
相关推荐
java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现...
Java IO NIO and NIO 2 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn...
java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...
java nio2, Pro Java 7 NIO2
Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...
java nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socket
Java IO NIO and NIO 2 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Java NIO,Ron Hitchens 著,中文版 裴小星 译,Pro Java 7 NIO.2,Anghel Leonard 著,pdf文字版带书签,无安全限制
Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...
Java NIO英文高清原版
Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据...
讲解了 JavaIO 与 JAVA NIO区别,JAVA NIO设计理念,以及JDK中java NIO中语法的使用
比较详尽地介绍了JDK1.7开始支持的NIO2技术。 有兴趣的开发者可以了解一下。
java_nio学习文档
Pro Java 7 NIO.2 – PDF Books
Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。 Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,...
Java+NIO
java NIO.zip
java NIO详细教程,包括使用背景,实现原理,代码实现
Java_NIO类库Selector机制解析.docJava_NIO类库Selector机制解析.docJava_NIO类库Selector机制解析.docJava_NIO类库Selector机制解析.doc