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™ NIO》由 Ron Hitchens 编写,出版社为 O'Reilly,出版于2002年8月,ISBN号为0-596-00288-2,全书共有312页。 ### Java NIO 的优势 本书深入探讨了 Java 1.4 版本中的新 I/O 功能,并通过具体示例展示...
通道是NIO中的核心概念之一,它提供了从一个数据源(如文件、套接字)到另一个数据源的数据传输路径。Java NIO支持多种类型的通道,包括文件通道(FileChannel)、套接字通道(SocketChannel)和服务器套接字通道...
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 NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...
### Java-NIO2教程知识点详解 #### I/O发展简史 - **JDK1.0-1.3**: 在此期间,Java的I/O模型主要依赖于...这只是Java NIO2中众多强大功能之一,通过这些新的API,开发人员可以更高效、简洁地处理文件系统相关的操作。
### Pro Java 7 NIO2:深入理解Path类与文件系统操作 #### 一、引言 《Pro Java 7 NIO2》是一本专注于Java 7中的新I/O(NIO.2)特性的书籍,它介绍了如何利用Java 7的新特性来处理文件和网络操作。本书的核心在于...
Java NIO(New IO)是Java 1.4版本引入的一个新模块,它提供了一种不同于传统IO(基于字节流和字符流)的I/O操作方式。传统的IO模型是阻塞式的,而NIO的核心特点是非阻塞,这使得在处理大量并发I/O请求时更为高效。...
Java IO NIO and NIO 2 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
`Pro Java 7 NIO.2`这本书由Anghel Leonard著,深入探讨了Java NIO.2 API,这是Java 7引入的进一步扩展,包括: 1. **文件系统API增强**:新增了AsynchronousFileChannel,支持异步文件操作,可以在后台线程中执行...
2. **缓冲区(Buffer)**:在NIO中,数据被存储在缓冲区对象中。缓冲区提供了一种高效的方式管理内存,可以方便地进行读写操作。缓冲区有固定大小,一旦写满,需要清空或者翻转才能继续写入。同样,读取数据也需要将...
Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...
### Java NIO 详细教程知识点解析 #### 一、Java NIO 概述 Java NIO(New IO)是Java平台提供的一种新的IO操作模式,它首次出现在Java 1.4版本中,并在后续版本中不断完善。Java NIO 的设计目的是为了克服传统Java ...
Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的 Blocking I/O(同步阻塞I/O)相对。NIO在Java 1.4版本引入,其设计目标是提供一种更高效、更灵活的I/O操作方式,特别适合处理大量并发连接...
Java IO、NIO以及NIO.2是Java中用于处理输入/输出操作的三种主要机制。本书《Java IO, NIO and NIO.2》旨在深入浅出地介绍这些机制,同时书中内容均为英文。接下来将详细介绍这些知识点。 **Java IO** Java IO是...