`
747017186
  • 浏览: 317460 次
社区版块
存档分类
最新评论

java之nio(2)

 
阅读更多

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();
	}
}

 

 

  • 大小: 9.1 KB
  • 大小: 15 KB
  • 大小: 7 KB
分享到:
评论

相关推荐

    java基于NIO实现Reactor模型源码.zip

    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

    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 NIO和java并发编程的书籍java...

    Pro Java 7 NIO2

    java nio2, Pro Java 7 NIO2

    JavaNIO chm帮助文档

    Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...

    java nio 实现socket

    java nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socket

    Java IO NIO and NIO 2 epub

    Java IO NIO and NIO 2 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Java NIO 中英文版 + Pro Java 7 NIO.2

    Java NIO,Ron Hitchens 著,中文版 裴小星 译,Pro Java 7 NIO.2,Anghel Leonard 著,pdf文字版带书签,无安全限制

    Java NIO 中文 Java NIO 中文 Java NIO 中文文档

    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 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据...

    java NIO 中文版

    讲解了 JavaIO 与 JAVA NIO区别,JAVA NIO设计理念,以及JDK中java NIO中语法的使用

    Java-NIO2教程

    比较详尽地介绍了JDK1.7开始支持的NIO2技术。 有兴趣的开发者可以了解一下。

    java_nio学习文档

    java_nio学习文档

    ProJava7NIO.2PDFBooks.pdf 英文原版

    Pro Java 7 NIO.2 – PDF Books

    java NIO 视频教程

    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

    Java+NIO

    java NIO.zip

    java NIO.zip

    java NIO详细教程

    java NIO详细教程,包括使用背景,实现原理,代码实现

    Java_NIO类库Selector机制解析.doc

    Java_NIO类库Selector机制解析.docJava_NIO类库Selector机制解析.docJava_NIO类库Selector机制解析.docJava_NIO类库Selector机制解析.doc

Global site tag (gtag.js) - Google Analytics